如何将文件添加到XCode中的资源文件夹?

时间:2011-02-17 06:40:39

标签: iphone xcode sqlite xcode4

我想将一个sqlite数据库添加到XCode 4(也适用于XCode 3)。教程说明将.db文件添加到资源文件夹,我想这会在构建期间复制到〜/ Library / Application Support / iPhone Simulator / 4.2 / Applications / {some-id} / Documents / 在哪里可以找到NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)的文件 等

但是,XCode 4没有可见的资源文件夹。

我尝试使用“添加文件...”命令添加文件,然后它出现在“目标”> AppName>复制捆绑资源,但总是一个空的.db文件出现在上面的文档文件夹中(然后我手动替换 - 显然不是正确的方法!)

(由于数据的性质,我坚持使用sqlite而不是CoreData)

2 个答案:

答案 0 :(得分:11)

你必须开始在你的project-xcode中添加你的数据库,所以它将被添加到你的bundle文件夹中,你可以通过代码找到它:

[NSBundle mainBundle]

这是唯一可以在“构建”应用程序时通过xcode添加文件的文件夹(最终使用子文件夹,但不是“系统”文件夹作为“文档”),现在您只需要记住主要的bundle文件夹只是“只读”,所以你不能使用你的数据库写权限。 所以通常的方法是:

1)当您想要使用数据库时,请通过代码检查它是否存在于app:documents文件夹中。 当然第一次没有,所以

2)从主包中复制

- (BOOL)transferDb {
    NSError **error;
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString *path = [documentsDirectory stringByAppendingPathComponent:@"yourData.db"]; 

    NSFileManager *fileManager = [NSFileManager defaultManager];

    if (![fileManager fileExistsAtPath: path])
    {
        NSString *bundle =  [[ NSBundle mainBundle] pathForResource:@"preferenze" ofType:@"plist"];
        [fileManager copyItemAtPath:bundle toPath:path error:error];
        return YES;
    }
    return NO;
}

3)在文件夹

中使用它(r / w)

PS: 并且(当然)请记住,当您在iPhone /模拟器中使用/编辑/编写数据库时,可能会添加记录,主数据包中的数据库,当然mac /项目中的数据库也不会更新,不会记录将被添加到它,所以如果你出于任何原因在iPhone /模拟器上删除你的应用程序(或通过xCode“构建”菜单“清除所有目标”),检查/复制方法将复制文档中的“处女”数据库文件夹,所以你将失去所有的变化......

答案 1 :(得分:2)

请注意您放入Documents文件夹的数据量,这是针对用户数据的,因为这些数据将使用iCloud进行备份Apple限制了应用程序可以在文档中存储和使用的数据量文件夹中。

我的应用程序以这种方式使用6MB SQLite数据库被拒绝。而是将其复制到缓存目录:NSCachesDirectory。

或阻止备份文件:https://developer.apple.com/library/ios/#qa/qa1719/_index.html