Gaz*_*zer 5 sqlite iphone xcode xcode4
我想将一个sqlite数据库添加到XCode 4(也适用于XCode 3).教程说明将.db文件添加到资源文件夹中,我想这会在构建期间复制到〜/ Library/Application Support/iPhone Simulator/4.2/Applications/{some-id}/Documents /,您可以在其中找到该文件NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)
等等
但是,XCode 4没有可见资源文件夹.
我尝试使用Add File ...命令添加一个文件,然后它出现在Targets> AppName> Copy Bundle Resources中,但总是一个空的.db文件出现在上面的文档文件夹中(然后我手动替换 - 显然不正确的做法!)
(由于数据的性质,我在CoreData上坚持使用sqlite)
mer*_*nix 11
你必须开始在你的project-xcode中添加你的数据库,所以它将被添加到你的bundle文件夹中,你可以通过代码找到它:
[NSBundle mainBundle]
Run Code Online (Sandbox Code Playgroud)
它是唯一一个文件夹,您可以在"构建"您的应用程序时通过xcode添加文件(最终使用子文件夹,而不是"系统"文件夹作为"文档"),现在您只需要记住主要的文件夹文件夹只是"只读",所以你不能使用你的数据库写权限.所以通常的方法是:
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;
}
Run Code Online (Sandbox Code Playgroud)
3)在文档文件夹中使用它(r/w)
ps:和(当然)请记住,当您在iPhone /模拟器中使用/编辑/编写数据库时,可能会添加记录,主数据包中的数据库,当然还有mac/project中的数据库不会更新,不会有任何记录添加到它,所以如果你出于任何原因在iPhone /模拟器上删除你的应用程序(或通过xCode"构建"菜单"清除所有目标"),检查/复制方法将复制"处女"数据库文档文件夹再次,所以你将失去所有的变化......