2012-01-30 1 views
2

Я работаю над iOS-приложением Core Data, которое отлично работает с помощью «каналов» Apple - iOS-симулятор & Установка Xcode, но при попытке вручную установить его на устройство приложение сработает. Моя главная цель - поставить приложение на Cydia.Cydia App Documents Folder Not Created

A guide to preparing an app for Cydia Я прочитал эту статью, и я на дне его сказал

Appstore приложение имеет папку Documents, которая создается в процессе установки. Приложение Jailbroken этого не делает. Это приложение может создать свою собственную папку. Если вам нужен этот тип папки, вы должны создать это с помощью простой команды mkdir в вашей функции applicationDidFinishLaunching. Просто добавьте простую функцию: mkdir ("/ var/mobile/Library/YOURAPPNAME", 0755); Если папка уже существует, никакого вреда не будет. Вы хотите сделать это, потому что процесс установки выполняется как пользовательский root, а приложение работает как пользовательский мобильный. Если Cydia сделает это для вас, папка будет иметь неправильные разрешения.

Я не знаю, как именно работает Core Data, но я знаю, что база данных Core Data хранится в папке «Документы», и теперь я полагаю, что это причина аварии моего приложения.

Функция mkdir не работает при создании папки «Документы».

Как я могу создать папку «Документы» и как мне ее заставить работать с Core Data, обеспечивая загрузку базы данных из этой папки, которую я создал?

Заранее спасибо

ответ

5

Скорее всего, вы все еще используете AppStore дружественных документы путь в методах, которые создают и загружать файл базы данных CoreData (я думаю, что Xcode поставит их в вашем AppDelegate по умолчанию).

Проверьте метод, который загружает persistentStorageCoordinator и найдите строку, как это:

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

И убедитесь, что docPath является «/ Var/мобильный/Library/My_Cool_App» и не происходящий от стандартного AppStore товарищеского :

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

вы можете создать метод, который возвращает соответствующий каталог документов, в зависимости от того, что целевой компиляции приложения для:

+(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 
} 
+0

Благодарим вас за отличный ответ. Внесите изменения в мое приложение и посмотрите, работает ли решение ур. –

+0

@Mike Cugini, Mike Я создал метод, который вы указали выше, в моем файле 'AppDelegate.m', и я также создал' NSArray', 'NSString' в файле' AppDelegate.m'. Программа компилируется отлично, но не помещает файл 'Accounts.sqlite' в каталог'/var/mobile/Library/KegCop'. Файл все еще находится в каталоге 'Documents'. Вы знаете, что я могу делать неправильно? – Chris