'iPhone)'에 해당되는 글 1건

  1. 2010.06.24 SQLite 사용하기 (MacOS / xCode / iPhone)
아이폰어플개발정보2010. 6. 24. 14:19
SQLite 사용하기 (MacOS / xCode / iPhone)
 
 SQL Database

- CLI(Command Line Interface)를 사용하여 생성 (한마디로 터미널에서 작업해라~)

- > sqlite3 test.sql 이라고만 치면 test라는 이름을 가진 database 생성

- database를 프로젝트에 추가 (Project ->Add to Project)

- Resource 폴더 밑으로 넣어준다

- SQLite Manager를 사용하면 database를 쉽게 건드릴 수 있다.

 SQL Lib

lightweight SQL database를 임베드 시킨다.

- 프로젝트에 libsqlite3.0.dylib 파일을 추가

- Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS2.0.sdk/usr/lib/ 에 위치

- target -> Get Info -> General -> Linked Libraries -> 추가

 Model

database로 부터 받아온 data를 저장하기 위해 NSObject를 상속하여 만든다.

CRUD(Create/Read/Update/Delete)를 모두 처리할 수 있도록 구현 (sqlite3 포인터를 내장)

Copying the database

초반에 database를 복사해야 한다.

Application의 resource bundle 안에 default database를 가지고 있다.

만약 bundle 안에 어떤 것이라도 변경이 된다면 code sign은 실패할 것이다.

그러므로 Application Documents directory에  database의 복사본을 생성하자 (for writable db)

delegate 에 추가되는 부분~

1. applicationDidFinishLaunching: 에서 window를 구성 하기 전!!!!

2. 사용자의 iPhone documents directory에 database가 존재하는지 체크.

3. (편집가능한)database가 존재하지 않으면 복사.

 getting data from the database - delegate

sqlite3_open

sqlite3_stmt

 getting data from the database - model class

stmt 재사용 : prepare -> bind -> step -> reset -> prepare -> bind -> step -> reset -> ...

sqlite3_stmt 를 사용별로 static으로 선언하고 한번에 한 쿼리씩 사용한다.

sql문에

- ?
- ?NNN
- :AAA
- @AAA
- $VVV

을 적을 수가 있다. 이 파라메타는 바운드된 변수와 교체됩니다.

자주 발생하는 쿼리는 한번만 컴파일하고 새로운 변수만 바인딩해서 사용하면 된다.

sqlite3_bind_*()

sqlite3_prepare_v2() 후에, sqlite_step() 전에 사용.


 

 closing the database

application이 close 될때 delegate는 applicationWillTerminate: 메세지를 받는다.

적절하게 리소스들을 release 하려면 여기에서 database를 close 시켜주면 된다.

 Display data in the UITableView

tableView:numberOfRowsInSection:

- table view에 주어진 section안에 row의 수를 반환.

- data를 담아둔 array의 수를 반환하도록 수정.

tableView:cellForRowAtIndexPath:

- table view의 특정 위치에 cell을 추가.

- objectAtIndex 함수를 사용하여 array로부터 objtect를 얻고 UITableViewCell의 text에 object의 특정값을 설정.

 Delete a row from UITableView

 RootViewController의 viewDidLoad: 함수에  navigation bar의 Edit 버튼을 추가하는 코드 작성.

UITableView에서 row가 지워지거나 추가되면 RootViewController에 있는

tableView:commitEditingStyle:forRowAtIndexPath: 호출 됨. 이 함수를 수정해 주자.

1. editingStyle이 UITableViewCellEditingStyleDelete 인지 체크

2. data 삭제 (delegate의 remove 함수 호출)

3. deleteRowsAtIndexPaths: 함수를 이용해서 UITableView에서 row 삭제 

 Delete rows from the database - delegate

delegate 파일에 Model class 오브젝트를 인자로 받고 void를 리턴하는 remove 함수를 생성

1. Model class 자체의 remove 함수를 호출

2. Array에서 데이터를 삭제

 Delete rows from the database - model class

실제 database로 부터 데이터를 삭제

1. static으로 선언한 sqlite3_stmt (여기서는 delete_stmt)를 체크

2. nil 이면 prepare

3. bind -> step -> reset

 Create the add Method - model class

실제 database에 데이터를 추가하는 부분

1. static으로 선언된 sqilte3_stmt(add_stmt)를 체크

2. nil 이면 prepare

3. bind

4. step : 추가가 성공했으면 SQLITE_DONE을 반환

5. sqlite_int64 sqlite3_last_insert_rowid(sqlite3*); 를 사용하여 가장 마지막 primary key 값을 얻는다

6. reset

 Create the add Method - delegate

delegate 파일에 Model Class 타입을 인자로 받는 add 함수 생성

1. Model Class 자체의 add 함수 호출

2. 배열에 데이터를 추가

 Add new UIView - AddView.xib

1. Insterface Builder를 사용하여 새로운 뷰를 생성

2. 2개의 label과 두개의 text boxes를 추가

3. Text Field의 delegate 속성으로 부터 "File's Owner" 오브젝트로 연결

4. 저장 (AddView.xib 생성)

 Create UIViewController - AddView Controller

1. xCode를 이용해서 새로운 view controller를 생성 (AddViewController. 생성)

2. File's Owner의 클래스를 위에서 1번에서 만든 AddViewControoler로 설정

3. outler에 UITextField를 두개 생성

4. view ->view / 3번에서 만든 textfiled는 addview에 있는 textfield와 각각 링크

5. 저장(File -> Write File Classes...)

Add View Controller의 UINavigationItem에 "Cancel" 과  "Save" 버튼을 추가

Add View Controller의 viewDidLoad: 에서 작성

save 함수 생성

1. 각각의 text field 에서 text 값을 받아온뒤 object 생성

2. delegate 의 add 함수 호출

3. dismissModalViewControllerAnimated: 사용하여 컨트롤 해산

cancel 함수 생성

1. dismissModalViewControllerAnimated: 사용하여 컨트롤 해산

 Create UIViewController - RootViewController

Add 버튼을 추가하고 AddView를 연결.

- AddViewController 와 UINavigationController 변수 생성

- viewDidLoad: 에 add 버튼을 추가하고 selector 생성

add 버튼 selector 생성

1. AddViewController와 UINavigationController를 생성

2. presentModalViewController: 를 사용하여 navigationController에 추가

viewWillAppear: 에 View 를 표시하기전 table view를 update 해준다.

 Select data from database - model class

"hydrate"라는 이름을 가지는 함수를 생성 (선택된 object의 모든 detail 데이터를 가져오는 부분)

1. 이미 가져왔는지를 체크

2. static으로 선언된 hydrate 관련 sqlite3_stmt가 nil인지 체트

3. nil이면  sqlite3_prepare_v2():를 이용하여 stmt 빌드

4. bind -> step

5. SQLITE_ROW를 반환하면 sqlite3_column_*():를 사용하여 데이터를 받아온다.

6. reset

 Create the detail view - DetailView.xib

1. Insterface Builder를 사용하여 새로운 뷰를 생성

2. UITableView 추가

3. table view의 delegate 속성으로 부터 "File's Owner" 오브젝트로 연결

4. table view의 data source 속성으로 부터 "File's Owner" 오브젝트로 연결

4. 저장 (DetailView.xib 생성)

 Create the detail view - DetailViewController

헤더에 Model Class 변수 추가

1. xCode를 이용해서 새로운 view controller를 생성 (DetailViewController. 생성)

2. File's Owner의 클래스를 위에서 1번에서 만든 AddViewControoler로 설정

3. outler에 UITableView를 생성

4. view ->view / 3번에서 만든 tableview는 detail view에 있는 table view와 각각 링크

5. 저장 (File -> Write File Classes...)

 Selecting a row - RootViewController 

tableView:willSelectRowAtIndexPath:에서 detailviewcontroller를 호출

헤더에 DetailViewController 변수 추가.

1. detailviewcontroller가 nil인지 체크. 없으면 생성

2. delegate의 array를 통해 선택된 model class 얻는다

3. model class의 "hydrate" 호출하여 데이터를 얻는다

4. 얻어온 model class object를 detailviewcontroller의 model class 변수에 할당

5. navigationController의 pushviewcontroller:를 사용하여 detail view를 표시

 Displaying data in the detail view

 참조한 블로그

iPhone SDK Tutorial - Using SQL Lite Part I

iPhone SQLite Tutorial Series



출처 : http://blog.naver.com/PostView.nhn?blogId=j021004&logNo=50037416173

'아이폰어플개발정보' 카테고리의 다른 글

[App Store] iPortkey  (0) 2010.06.24
touch event  (0) 2010.06.24
SQLite 사용하기 (MacOS / xCode / iPhone)  (0) 2010.06.24
한글입력기 nabi의 설치와 사용  (0) 2010.06.24
Beginning iPhone Development: Exploring the iPhone SDK  (0) 2010.06.24
iPhone Cool Projects  (0) 2010.06.24
Posted by 오늘마감

댓글을 달아 주세요