ban*_*lon 2 core-data objective-c jailbreak ios
我一直致力于通过Apple的"渠道" - iOS模拟器和Xcode安装完美运行的Core Data iOS应用程序,但当我尝试将其手动安装到设备上时,应用程序崩溃了.我的主要目标是将应用程序放在Cydia上.
为Cydia准备应用程序的指南 我读了这篇文章,我在底部说
Appstore应用程序具有由安装过程创建的Documents文件夹.越狱应用程序没有.应用程序可以创建自己的文件夹.如果您需要此类型的文件夹,则必须在applicationDidFinishLaunching函数中使用简单的mkdir命令创建此文件夹.只需添加一个简单的函数:mkdir("/ var/mobile/Library/YOURAPPNAME",0755); 如果该文件夹已存在,则不会造成任何损害.您希望这样做是因为安装过程以root用户身份运行,应用程序以用户移动方式运行.如果Cydia为您执行此操作,则该文件夹将具有不正确的权限.
我不太了解Core Data的工作原理,但我知道Core Data"数据库"存储在Documents文件夹中,我现在相信这是我的应用程序崩溃的原因.
mkdir函数在创建Documents文件夹时不起作用.
我将如何创建一个Documents文件夹,以及如何让它与Core Data一起使用,确保从我创建的这个文件夹加载数据库?
提前致谢
小智 5
很可能你仍然在创建和加载CoreData数据库文件的方法中使用AppStore友好文档路径(我认为Xcode默认会将这些放在你的AppDelegate中).
检查加载的方法persistentStorageCoordinator并查找如下所示的行:
NSURL *storeUrl = [NSURL fileURLWithPath: [docPath stringByAppendingPathComponent:@"my_cool_app.sqlite"]];
Run Code Online (Sandbox Code Playgroud)
并确保它docPath是"/ var/mobile/Library/My_Cool_App"而不是源自标准的AppStore友好:
NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *docPath = [documentPaths objectAtIndex:0];
Run Code Online (Sandbox Code Playgroud)
您可能想要创建一个方法,该方法根据您为应用程序编译的目标返回正确的Documents目录:
+(NSString *)documentsDirectoryPath
{
#ifdef JAILBREAK
NSString *documentPath = @"/var/mobile/Library/My_Cool_App";
if (![[NSFileManager defaultManager] fileExistsAtPath:documentPath])
{
[[NSFileManager defaultManager] createDirectoryAtPath:documentPath
withIntermediateDirectories:NO
attributes:nil
error:NULL];
}
return documentPath;
#else
NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
return [documentPaths objectAtIndex:0];
#endif
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1322 次 |
| 最近记录: |