我创建数据库并将* .sqlite文件放在Xcode的recources文件夹中。在打开数据库之前,我将其从资源复制到文档文件夹。 这在模拟器上工作正常,但在iPhone上不起作用。 由于某些原因,iPhone设备中不存在数据库文件。这是我的代码:
NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDir = [documentPaths objectAtIndex:0];
NSString *databasePath = [documentsDir stringByAppendingPathComponent:databaseFileName];
NSFileManager *fileManager = [NSFileManager defaultManager];
BOOL success = [fileManager fileExistsAtPath:databasePath];
if(!success) // all the time it's YES, even if I delete database
{
// copy database from application folder
NSString *databasePathFromApp = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:databaseFileName];
BOOL fileExists = [fileManager fileExistsAtPath:databasePathFromApp];
if (fileExists) { // It's NO, for some reasons database does not exist
[fileManager removeItemAtPath:databasePath error:nil];
[fileManager copyItemAtPath:databasePathFromApp toPath:databasePath error:nil];
}
[fileManager release];
}
return databasePath;
由于某些原因,该行始终返回NO
BOOL fileExists = [fileManager fileExistsAtPath:databasePathFromApp];
databasePathFromApp中的路径就像这样
的/ var /亚历山大/ XXX-XXX-XXX-XXX .... / AppName.app/database.sqlite
问题是:为什么资源中不存在数据库?
答案 0 :(得分:3)
最终发现了这个问题。 iPhone设备关心文件名注册,因此“database.sqlite”和“DataBase.sqlite”是设备的不同文件,但模拟器的文件相同。这太奇怪了。
我在博客中提出了这个问题 Can't open file in iPhone device, but can in iPhone simulator
答案 1 :(得分:0)
从资源中删除数据库&再次添加& 复选框显示在顶部,复制项目到目标组文件夹。
清洁目标&重置模拟器。