2012-04-17 2 views
0

현재 내 sqllite 데이터베이스를 내 응용 프로그램에 포함하고 있으며 응용 프로그램의 수명주기에 가장 적합한 시간이 언제 테이블에 생성되는지 궁금합니다. 또는 존재하는지 확인하십시오).IOS/SQLLite : 데이터베이스를 만드는 가장 좋은 시간은/어디야

는 내가 읽은 대부분의 예에서, 저자는 다음과 같이 수행합니다

- (void)viewDidLoad 
{ 
    NSString *docsDir; 
    NSArray *dirPaths; 

    // Get the documents directory 
    dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 

    docsDir = [dirPaths objectAtIndex:0]; 

    // Build the path to the database file 
    databasePath = [[NSString alloc] initWithString: [docsDir stringByAppendingPathComponent: @"contacts.db"]]; 

    NSFileManager *filemgr = [NSFileManager defaultManager]; 

    if ([filemgr fileExistsAtPath: databasePath ] == NO) 
    { 
     const char *dbpath = [databasePath UTF8String]; 

     if (sqlite3_open(dbpath, &contactDB) == SQLITE_OK) 
     { 
      char *errMsg; 
      const char *sql_stmt = "CREATE TABLE IF NOT EXISTS CONTACTS (ID INTEGER PRIMARY KEY AUTOINCREMENT, NAME TEXT, ADDRESS TEXT, PHONE TEXT)"; 

      if (sqlite3_exec(contactDB, sql_stmt, NULL, NULL, &errMsg) != SQLITE_OK) 
      { 
       status.text = @"Failed to create table"; 
      } 

      sqlite3_close(contactDB); 

     } else { 
      status.text = @"Failed to open/create database"; 
     } 
    } 

    [filemgr release]; 
    [super viewDidLoad]; 

} 

을하지만 viewDidLoad에 그것을 만들 수있는 BaseT 연결 장소 인 경우에 나는 방황 계속. 앱을 초기화하는 동안 만드는 것이 더 좋을까요?

이 더 내 현재 코드는 당신의 의견에 대한

제이슨 당신이 CoreData로 이동

답변

1

모델을 초기화하는 가장 좋은 장소는 앱 대리인입니다. iOS 스프링 보드는 스플래시 화면을 애니메이션 처리하여 앱 대표단 application:didFinishLaunchingWithOptions:이 돌아올 때까지 표시하므로 사용자가 눈치 채지 못하게 차단 작업을 할 수 있습니다 (UI 스터 터 없음). 이 메서드는 한 번만 호출되므로 응용 프로그램의 현재 실행 중에 데이터베이스 작성 코드가 여러 번 호출되지 않을 수 있습니다.

코드는 일반적으로 다음과 같습니다

, 당신은 당신이 sharedModel 방법 첫 번째 호출을 통해 인스턴스를 초기화 할 때 데이터베이스를 초기화한다 DataModel 싱글 톤 클래스가 제공 :

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    [DataModel sharedModel]; 

    // Initialize your window and root view controller... 

    return YES; 
} 
1

I 조언을 jusst 미세 ^^

감사를 작동하지 않고 있기 때문에 가장 좋은 방법이 무엇인지의 문제 Xcode에서 새로운 응용 프로그램을 생성하고 CoreData 확인란을 클릭 한 다음 AppDelegate를 검사하여 영구 저장소가 생성 된 위치 (및 방법)를 확인하여 쉽게 질문에 대답 할 수 있습니다.

+0

감사를 CoreData로 전환의 조언을 –