2010-07-23 1 views
0

У меня вопрос, я не могу заставить свою базу данных sqlite работать/открываться на устройстве ipad. Все работает отлично на симуляторе, но не в реальном устройстве. Я помещал MODE в NO, когда я хочу протестировать устройство, но он не загружается.sqlite работает на симуляторе, но не на устройстве

sqlite3 *database; 
if (MODE) { //Simulator 
    result = sqlite3_open("/Users/userID/Myapp/VRdb.sqlite", &database); 
} else { // On device 
    result = sqlite3_open([databasePath UTF8String], &database); 
} 

if(result != SQLITE_OK) 
{ 
    sqlite3_close(database); 
    view = [[UIAlertView alloc] 
      initWithTitle: @"Database Error" 
      message: @"Failed to open database." 
      delegate: self 
      cancelButtonTitle: @"OK" otherButtonTitles: nil]; 
    [view show]; 
    [view autorelease]; 

} 

DatabasePath получается:

DatabasePath = [[NSBundle mainBundle] pathForResource: @ "VRDB" OfType: @ "Sqlite"];

Есть ли что-то, что я пропустил ?????

ответ

4

Есть ли файл на этом пути? Хотя функция sqlite3_open() создаст файл, если он не существует, вы не можете создавать файлы внутри пакета приложений (разрешений). Файл фактически должен уже существовать и копироваться в комплект как ресурс во время сборки, а затем использоваться в качестве шаблона для копирования в область записи, такую ​​как папка с документами.

(благодаря Петру для побуждая меня, чтобы понять мой ответ был неполным :-))

+0

awlcs: Самый лучший способ, если вы собираетесь создать записываемый базу данных, было бы получить путь к документам каталог и использовать это. Вы можете и должны делать это безоговорочно, независимо от того, работаете ли вы на Симуляторе или нет. В самом деле, я бы предложил не создавать никаких различий между поведением Симулятора и поведением устройства, чем вы в любом случае сталкиваетесь. –

+0

Спасибо вам обоим, я попробую. Я думал, что использовать NSBundle было бы достаточно, но я был неправ :) – awlcs

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