iPhone和Simulator上的SQLite数据库

时间:2011-06-09 14:05:14

标签: iphone database sqlite xcode4

我创建数据库并将* .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

问题是:为什么资源中不存在数据库?

2 个答案:

答案 0 :(得分:3)

最终发现了这个问题。 iPhone设备关心文件名注册,因此“database.sqlite”和“DataBase.sqlite”是设备的不同文件,但模拟器的文件相同。这太奇怪了。

我在博客中提出了这个问题 Can't open file in iPhone device, but can in iPhone simulator

答案 1 :(得分:0)

从资源中删除数据库&再次添加& 复选框显示在顶部,复制项目到目标组文件夹。

清洁目标&重置模拟器。