我一直在为iPhone编写这个应用程序,我需要使用sqlite。我已经用一堆数据预加载了我的sqlite,我将该sqlite文件复制到我的项目文件夹中。当我启动应用程序时,似乎sqlite数据文件没有被复制到模拟器的应用程序文件(文档位置)。这是我的代码:
NSFileManager *fileManager = [NSFileManager defaultManager];
NSError *error;
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDir = [paths objectAtIndex:0];
NSString *dbPath = [documentsDir stringByAppendingPathComponent:@"moviedbl.data"];
BOOL success = [fileManager fileExistsAtPath:dbPath];
if(!success){
NSString *defaultDBPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent: @"moviedbl.data"];
//NSString *defaultDBPath = [[NSBundle mainBundle] pathForResource:@"moviedbl" ofType: @"data"];
success = [fileManager copyItemAtPath:defaultDBPath toPath:dbPath error:&error];
if(!success){
NSAssert1(0, @"Failed to create writable database file with message '%'.", [error localizedDescription]);
}
}
似乎defaultDBPath引用了模拟器中的app文件夹,它最初不包含任何sqlite文件,而是实际上正在等待将sqlite文件复制到它。根据我的理解,要复制文件,我们应该从我们的包中获取文件(不确定bundle是指我们的项目文件夹还是什么,但我认为它是我们的项目文件夹)并将其复制到我们的模拟器中。我已经坚持了几天,请赐教我...非常感谢你提前!!!
更新: 所以我实际上让它工作了。起初我以为是因为我没有从mainBundle或其他东西复制文件,但事实证明,当我在路径中打开.app的实际文件夹时,我做了。我看到它实际包含的数据库。奇怪的是它没有文件类型,但在xCode中它将文件类型显示为“data”,因此我继续使用ofType:@“data”。所以最后我将它更改为ofType:@“”并且它有效!无论如何!愚蠢的我,但感谢所有试图帮助的人! :D
答案 0 :(得分:1)
NSFileManager *fileManager = [NSFileManager defaultManager];
NSError *error;
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDir = [paths objectAtIndex:0];
NSString *dbPath = [documentsDir stringByAppendingPathComponent:@"moviedbl.data"];
if([fileManager fileExistsAtPath:dbPath]==NO){
NSString *defaultDBPath = [[NSBundle mainBundle] pathForResource:@"moviedbl" ofType: @"data"];
BOOL success = [fileManager copyItemAtPath:defaultDBPath toPath:dbPath error:&error];
if(!success){
NSAssert1(0, @"Failed to create writable database file with message '%'.", [error localizedDescription]);
}
}