2012-04-17 2 views
0

В настоящее время я включаю мою базу данных sqlite в свое приложение, и я продолжаю задаваться вопросом, когда самое лучшее время в жизненном цикле приложения для создания таблиц (или убедитесь, что они существуют).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 тонкие ^^

Спасибо за Ваше мнение

Джейсон

ответ

1

Лучшее место для инициализации вашей модели находится в вашем делете приложения. iOS Springboard анимирует ваш заставку и отображает его до тех пор, пока не вернется ваш делегат application:didFinishLaunchingWithOptions:, что позволит вам делать блокирующие операции без особого уведомления пользователей (без затухания UI). Этот метод вызывается только один раз, поэтому вы можете быть уверены, что код создания базы данных не будет вызываться несколько раз во время текущего запуска вашего приложения.

Код обычно выглядит следующим образом, дать вам есть класс DataModel одноплодной, который инициализирует базу данных при инициализации его экземпляр через первый вызов его метода sharedModel:

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

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

    return YES; 
} 
1

Я советую вам перейти CoreData для управления данными, а также вы можете легко ответить на свой вопрос, создав новое приложение в Xcode и установите флажок CoreData, а затем изучите AppDelegate, чтобы узнать, где (и как) создается постоянный магазин.

+0

Спасибо за советы перехода на CoreData –

Смежные вопросы