我在创建db文件时遇到问题。我正在使用这个功能:
- (void)createEditableCopyOfDatabaseIfNeeded {
// Testing for existence
BOOL success;
NSFileManager *fileManager = [NSFileManager defaultManager];
NSError *error;
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *writableDBPath = [documentsDirectory stringByAppendingPathComponent:DATABASE_NAME];
NSLog(@"%@", writableDBPath);
success = [fileManager fileExistsAtPath:writableDBPath];
if (success) {
NSLog(@"The file was here");
return;
}
// The writable database does not exist, so copy the default to
// the appropriate location.
NSString *defaultDBPath = [[[NSBundle mainBundle] resourcePath]
stringByAppendingPathComponent:DATABASE_NAME];
success = [fileManager copyItemAtPath:defaultDBPath
toPath:writableDBPath
error:&error];
NSLog(@"New file created");
if(!success)
{
NSAssert1(0,@"Failed to create writable database file with Message : '%@'.",
[error localizedDescription]);
}
}
执行此操作始终生成日志“创建新文件”,但如果我将查找器指向数据库路径,我会找到一个空文件夹:文件未创建!
您认为有什么问题?
(我有另一个使用相同功能的应用程序,效果很好!)
更新:
如果我使用finder的“转到文件夹”功能并粘贴到defaultDBPath
,它会告诉我我没有访问该文件夹所需的权限
答案 0 :(得分:1)
无法立即发现您的常规代码存在问题,但请注意,NSLog(@"New file created");
将始终发生,因为您没有检查success
。就像您对该文件的测试一样,您需要检查success
:
if (success)
NSLog(@"New file created");
然后,您将至少正确地测试它是否认为文件已创建。如果没有,请仔细检查您的defaultDBPath
和writableDBPath
变量。
答案 1 :(得分:0)
好的,我解决了......对我来说非常愚蠢!
我只是将DATABASE_NAME设置为“villaggio。db
”,而我真正的数据库名为“villaggio。sqlite
”!!!
= d