2010-07-23 173 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:@ “源码”];

有什么,我错过了吗?

回答

4

实际上是否有一个文件在该路径?尽管sqlite3_open()函数会在文件不存在的情况下创建文件,但不能在应用程序包内部创建文件(权限)。该文件实际上必须已经存在,并在构建时作为资源复制到捆绑包中,然后用作模板以复制到可写区域(如文档文件夹)。

(感谢彼得促使我实现我的答案是不完整的:-))

+0

awlcs:最好的办法,如果你打算创建一个可写的数据库,将得到的路径文件目录并使用它。你可以并且应该无条件地做到这一点,而不管你是否在模拟器上运行。事实上,我建议不要在模拟器行为和设备行为之间产生比你面对的更多的差异。 – 2010-07-24 02:50:12

+0

感谢你们两位,我会试一试。我认为使用NSBundle就足够了,但我错了:) – awlcs 2010-07-26 07:28:11

相关问题