2012-04-17 6 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の場所がある場合、私は放浪続けます。 アプリの初期化中に作成する方がよいでしょうか?

私の現在のコードはjusst正常に動作しますので、これは私がCoreDataに移動することができアドバイスあなたの意見のため^^

おかげ

ジェイソン

答えて

1

モデルを初期化するのに最適な場所は、アプリケーションの代理人です。 iOS Springboardはスプラッシュ画面をアニメーション表示し、アプリケーションデリゲートのapplication:didFinishLaunchingWithOptions:が返るまで表示します。ユーザーがあまり気付かないうちにブロッキング操作を行うことができます(UIスタッターなし)。 このメソッドは1回だけ呼び出されるため、アプリケーションの現在の実行中にデータベース作成コードが複数回呼び出されないようにすることができます。

あなたはそのsharedModelメソッドの最初の呼び出しを通じてインスタンスを初期化するときに、データベースを初期化しDataModelシングルトンクラスを持って与えるコードは、通常、次のようになります。CoreDataへの切り替えのアドバイスを

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

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

    return YES; 
} 
1

かなりのベストプラクティスであるかのより多くの質問ですXcodeで新しいアプリケーションを作成し、CoreDataチェックボックスをクリックしてAppDelegateを調べて、永続ストアがどこで(どのように)作成されたかを確認することで、簡単に質問に答えることができます。

+0

感謝を –

関連する問題