确保 (a) 将 db 包含在包中(请参阅此处以获取“复制包资源”所在位置的屏幕快照);(b)以编程方式将db 从 bundle 复制到文档。然后,您可以从那里打开它。
为什么它可以在您的模拟器上运行而不是在设备上运行有点好奇。我只能想象您正在从某个固定路径读取,而不是以编程方式检索应用程序的 Documents 文件夹?
更新:
我建议检查您的各种返回码并确保一切正常。
我已经获取了您的代码示例并(a)检查了创建的结果FMDatabase
;(b) 检查结果open
;(c) 检查结果FMResultSet
,包括 sqlite 错误信息的显示;(d) 关闭结果集:
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *docsPath = [paths objectAtIndex:0];
NSString *path = [docsPath stringByAppendingPathComponent:@"DADatabase.sqlite"];
FMDatabase *database = [FMDatabase databaseWithPath:path];
NSAssert(database, @"Unable to create FMDatabase object");
NSLog(@"%@", database);
BOOL success = [database open];
NSAssert(success, @"Unable to open database");
FMResultSet *results = [database executeQuery:@"SELECT * FROM DrugList"];
NSAssert(results, @"Unable to create result set: %@", [database lastErrorMessage]);
while([results next]) {
NSString *name = [results stringForColumn:@"Drugname"];
[arrayToLoadDiseases addObject:name];
}
[results close];
[database close];
如果你在你的模拟器中运行它,你可以继续检查模拟器的包和文档文件夹,如果事情不正确,只是为了确保一切都在它应该在的地方。您的模拟器文件夹类似于“~/Library/Application Support/iPhone Simulator/5.1/Applications/”(将 5.1 替换为您正在使用的模拟器的任何版本)。您可能必须通过在命令行窗口中Library
运行来取消隐藏您的文件夹(如果您还没有) 。无论如何,您可以使用 Mac OS X 的命令打开模拟器的数据库并确保您的表正常。chflags nohidden ~/Library
Terminal
sqlite3
一个常见的错误是未能以编程方式正确复制数据库,因此该open
方法将创建一个空白数据库,并且executeQuery
会失败,说找不到表。
让我知道你发现了什么。