sqlite无法在iPhone模拟器上运行

时间:2011-11-17 05:23:46

标签: ios ios-simulator

我有一个奇怪的问题。我的应用程序在我的设备上工作正常,但sqlite数据库在模拟器上不起作用。文件“database.sqlite”与我的应用程序存在于同一文件夹中,它具有相同的名称,列名称也正确。

所以我认为配置有问题,但我不知道是什么。有人可以帮帮我吗。

由于

2 个答案:

答案 0 :(得分:0)

以下是一些似乎可以解决问题的帖子:http://forums.macrumors.com/showthread.php?t=484899

答案 1 :(得分:0)

原因之一可能是您应该确保在使用数据库之前将数据库从支持文件应用程序目录(只读)复制到库或文档。这是一个来自我的样本的ensurePrepared函数,它使用的是sqlite。在这种情况下,它被称为contacts.db

- (BOOL)ensureDatabasePrepared: (NSError **)error
{
    // already prepared
    if ((_dbPath != nil) &&
        ([[NSFileManager defaultManager] fileExistsAtPath:_dbPath]))
    {
        return YES;
    }

    // db in main bundle - cant edit.  copy to library if !exist
    NSString *dbTemplatePath = [[NSBundle mainBundle] pathForResource:@"contacts" ofType:@"db"];
    NSLog(@"%@", dbTemplatePath);

    NSString *libraryPath = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) lastObject];
    _dbPath = [libraryPath stringByAppendingPathComponent:@"contacts.db"];

    NSLog(@"dbPath: %@", _dbPath);

    // copy db from template to library
    if (![[NSFileManager defaultManager] fileExistsAtPath:_dbPath])
    {
        NSLog(@"db not exists");
        NSError *error = nil;
        if (![[NSFileManager defaultManager] copyItemAtPath:dbTemplatePath toPath:_dbPath error:&error])
        {
            return NO;
        }

        NSLog(@"copied");
    }    

    return YES;    
}