iPhone不会创建sqlite db文件

时间:2011-02-26 11:26:47

标签: iphone sqlite

我在创建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,它会告诉我我没有访问该文件夹所需的权限

2 个答案:

答案 0 :(得分:1)

无法立即发现您的常规代码存在问题,但请注意,NSLog(@"New file created");将始终发生,因为您没有检查success。就像您对该文件的测试一样,您需要检查success

if (success)
    NSLog(@"New file created");

然后,您将至少正确地测试它是否认为文件已创建。如果没有,请仔细检查您的defaultDBPathwritableDBPath变量。

答案 1 :(得分:0)

好的,我解决了......对我来说非常愚蠢!

我只是将DATABASE_NAME设置为“villaggio。db”,而我真正的数据库名为“villaggio。sqlite”!!!

= d