我使用了FireFox附加SQLite Manager,创建了一个数据库,它以#34; DB.sqlite"的形式保存到我的桌面。我将文件复制到项目的支持文件中。但是当我运行应用程序时,我立即收到错误
"断言失败 - [AppDelegate copyDatabaseIfNeeded],/ Users / Mac /Desktop / Note / Note / AppDelegate.m:32 2014-08-19 23:38:02.830 注意[28309:60b] 由于未捕获的异常而终止应用 ' NSInternalInconsistencyException',原因:'无法创建可写 带有消息的数据库文件'操作无法完成。 (可可错误4。)'。'第一次抛出调用堆栈:" ...
以下是发生错误的App Delegate Code
-(void) copyDatabaseIfNeeded
{
NSFileManager *fileManager = [NSFileManager defaultManager];
NSError *error;
NSString *dbPath = [self getDBPath];
BOOL success = [fileManager fileExistsAtPath:dbPath];
if (!success)
{
NSString *defaultDBPath = [[ [NSBundle mainBundle
] resourcePath] stringByAppendingPathComponent:@"DB.sqlite"];
success = [fileManager copyItemAtPath:defaultDBPath toPath:dbPath error:&error];
if (!success)
NSAssert1(0, @"Failed to create writable database file with message '%@'.", [error localizedDescription]);
}
}
我对Sqlite很新,所以我可能没有在FireFox Sqlite管理器中正确创建数据库,或者我没有"#34;正确"复制.sqlite文件? (我确实检查了sqlite中的目标成员资格,并且它正确选择了我的项目。此外,.sqlite文件名完全匹配。)
答案 0 :(得分:1)
在iOS中,您无法在应用的捆绑中写入文件。整个包是只读的。 您应该在NSDocumentDirectory中创建数据库(sqlite文件)以便对其进行处理。
请访问以下网站获取教程: http://objectivecwithsuraj.blogspot.in/2012/10/database-implementation-using-sqlite-in.html