Cydia应用程序文档文件夹未创build

我一直在研究Core Data iOS应用程序,通过苹果的“渠道” – iOS模拟器和Xcode安装完美工作,但是当我尝试手动将其安装到设备上时,应用程序崩溃。 我的主要目标是把应用程序放在Cydia上。

为Cydia准备一个应用程序的指南我阅读这篇文章,我在底部说

Appstore应用程序具有由安装过程创build的“文档”文件夹。 越狱应用程序不。 这是由应用程序创build自己的文件夹。 如果您需要这种types的文件夹,则必须在applicationDidFinishLaunching函数中使用简单的mkdir命令来创build此文件夹。 只需添加一个简单的函数:mkdir(“/ var / mobile / Library / YOURAPPNAME”,0755); 如果文件夹已经存在,没有任何伤害。 您希望这样做,因为安装过程以root用户身份运行,应用程序以用户移动方式运行。 如果Cydia为你做这个,那么这个文件夹会有不正确的权限。

我不太了解核心数据的工作原理,但是我知道核心数据“数据库”存储在“文档”文件夹中,现在我相信这是我的应用崩溃的原因。

mkdir函数在创build“文档”文件夹时不起作用。

我将如何去创build一个Documents文件夹,以及如何让它与Core Data一起工作,确保数据库从我创build的这个文件夹中加载?

提前致谢

很可能你仍然在创build和加载CoreData数据库文件的方法中使用AppStore友好的Documentspath(我认为Xcode会默认把这些放在你的AppDelegate中)。

检查加载persistentStorageCoordinator的方法并查找如下所示的行:

 NSURL *storeUrl = [NSURL fileURLWithPath: [docPath stringByAppendingPathComponent:@"my_cool_app.sqlite"]]; 

并确保docPath是“/ var / mobile / Library / My_Cool_App”,而不是源自标准的AppStore friendly:

 NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *docPath = [documentPaths objectAtIndex:0]; 

您可能想创build一个方法,根据您编译应用程序的目标返回适当的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 }