Сбой каталога приложения CoreData на iOS3 - PullRequest
4 голосов
/ 21 декабря 2010

Я почти закончил свое приложение, которое хорошо работает на iOS4, однако при загрузке его в симулятор 3.2 оно вылетает с ...

2010-12-21 07:54:32.052 App[14044:207] *** -[NSPathStore2 URLByAppendingPathComponent:]: unrecognized selector sent to instance 0x4d2b640
2010-12-21 07:54:32.054 App[14044:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSPathStore2 URLByAppendingPathComponent:]: unrecognized selector sent to instance 0x4d2b640'

Я получаю каталог документов приложения с

NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"App.sqlite"];

- (NSURL *)applicationDocumentsDirectory {
    return [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
}

Любая помощь была бы отличной, спасибо.

Ответы [ 3 ]

9 голосов
/ 24 декабря 2010

Используется

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *myPathDocs =  [documentsDirectory stringByAppendingPathComponent:@"app.sqlite"];
NSURL *storeURL = [NSURL fileURLWithPath:myPathDocs];

Спасибо, Джастин

5 голосов
/ 21 декабря 2010

В документации упоминается, что URLByAppendingPathComponent: доступно только в iOS 4 и более поздних версиях.Вы можете сделать то же самое, используя NSStrings с stringByAppendingPathComponent: , а затем, когда закончите, преобразуете его в URL.

По-видимому, URLsForDirectory:inDomains: также доступно только для 4.0.Проверьте NSSearchPathsForDirectoriesInDomains () для альтернативы, которая совместима с более ранними ОС.

1 голос
/ 02 апреля 2012

Для совместимости с iOS3 измените метод и вызывающего абонента на:

- (NSString *)applicationDocumentsDirectory
{
    return [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
}

NSString *storePath = [[self applicationDocumentsDirectory] stringByAppendingPathComponent:@"App.sqlite"];

Модель также нуждается в изменении:

- (NSManagedObjectModel *)managedObjectModel
{
    if (__managedObjectModel != nil) {
    return __managedObjectModel;
    }

    NSString *path = [[NSBundle mainBundle] pathForResource:@"App" ofType:@"momd"];  
    NSURL *modelURL = [NSURL fileURLWithPath:path];

//  this was:    
//  NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"App" withExtension:@"momd"];

    __managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];
    return __managedObjectModel;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...