2012-05-23 1 views
2

Я читал, что я должен найти свою БД SQLite на этом пути:Папка документов пуста в симуляторе. Где мой db.sqlite?

~/Library/Application Support/iPhone Simulator/ВАШ КСН-ВЕРСИЯ/Applications/UNIQUE-KEY-FOR-ВАШИХ-APP/Документы

Но папка пуста. Когда я запускаю свое приложение в симуляторе, я могу запросить db. db изначально находится в папке ресурсов моего приложения.

Я работаю с Xcode 3.2.6 и OS X 10.6.8

IS там где-то, где я мог смотреть на это?

Большое спасибо. Лапо

-(void)insertError:(Frage *) f 
      answer2:(NSString *) answer2 
      answer3:(NSString *) answer3 
{ 

    int resconn = sqlite3_open([pathDB UTF8String], &database); 

    if (resconn == SQLITE_OK) { 

     NSString * sql = @"Insert into errors (id, answer2,answer3) values (?,?,?)"; 
     const char * sqlStatement = [sql UTF8String]; 

     sqlite3_stmt * compiledStatement; 

     if (sqlite3_prepare_v2(database, sqlStatement, -1 , &compiledStatement, NULL) == SQLITE_OK) { 
      sqlite3_bind_text(compiledStatement, 1, [f.id UTF8String], -1 , SQLITE_TRANSIENT); 
      sqlite3_bind_int(compiledStatement, 2, [answer2 intValue]); 
      sqlite3_bind_int(compiledStatement, 3, [answer3 intValue]); 
     } 
     if (!sqlite3_step(compiledStatement) == SQLITE_DONE) { 
      // 
     } 
     sqlite3_finalize(compiledStatement); 

    } 
    sqlite3_close(database); 
} 
+0

Вы копируете файл db из папки «Ресурсы» в папку «Документы» после запуска вашего приложения? – Mutix

+0

No @Mutix Я этого не сделал, так как думал, что это будет необходимо. В любом случае, после вашего предложения, я его скопировал. Во всяком случае, этот db остается нетронутым, и я не могу получить записи, которые я вставил. Спасибо – user1412042

+0

После того, как вы скопировали его в папке «Документы», вам нужно будет использовать db, расположенный в папке с документами, для выполнения ваших запросов sql. Можете ли вы опубликовать некоторый код вашего копирования и использования db, пожалуйста, это может помочь нам найти вашу проблему. – Mutix

ответ

0

Для того, чтобы получить доступ к базе данных ресурсов в папке Documents приложения, сначала необходимо скопировать его там, когда запуске приложения.

Если файл базы данных находится в папке ресурсов в проекте xcode, он не будет автоматически скопирован в каталог документов приложения.

Для этого вы можете использовать:

NSString *documentsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 

NSError *error; 

NSString *databasePath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"YOUR_DB_IN_RESOURCES"]; 

[[NSFileManager defaultManager] copyItemAtPath:databasePath 
               toPath:[NSString stringWithFormat:@"%@/%@",documentsDirectory,@"YOUR_DB"] 
               error:&error]; 

тогда Вы сможете получить доступ к базе данных, которая в настоящее время в документах папку, используя существующий код ([pathDB UTF8String] должен указывать на каталог документов, а не ресурсы) ,

Как вы упомянули, вы все равно можете использовать БД в ресурсах, но он будет вытернут каждый раз, когда вы перезапустите приложение. Хитрость заключается в том, чтобы скопировать db в папку документов, где она останется, пока приложение не будет удалено вручную с устройства (папка документов также сохраняется во время обновлений приложения, поэтому ваш db остается, когда пользователи обновляют приложение).

Надеюсь, что это поможет :)