'- [NSURL initFileURLWithPath:]: параметр строки nil' при использовании CoreData - PullRequest
2 голосов
/ 22 февраля 2011

У меня есть несколько классов моделей, которые я хотел сохранить с помощью инфраструктуры CoreData. Я создал файл xcdatamodel и добавил эти уже существующие классы в файл модели CoreData. Я также скопировал код, отвечающий за управление контекстом и т. Д., Из шаблона проекта основных данных из кода XCode.

Теперь у меня есть следующий код (он был скопирован, только имя файла было изменено на HistoryDataModel):

- (NSManagedObjectModel *)managedObjectModel {

   if (managedObjectModel != nil) {
       return managedObjectModel;
   }
   NSString *modelPath = [[NSBundle mainBundle] pathForResource:@"HistoryDataModel"  ofType:@"momd"];
   NSLog(@"Model path:", modelPath);
   NSURL *modelURL = [NSURL fileURLWithPath:modelPath];
   managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];    
   return managedObjectModel;
}

Теперь, когда я запускаю этот код и пытаюсь получить доступ к данным в CoreData, я получаю следующую ошибку:

* Завершение работы приложения из-за необработанного исключения 'NSInvalidArgumentException', причина: '* - [NSURL initFileURLWithPath:]: параметр строки nil'

и это происходит, когда

NSString *modelPath = [[NSBundle mainBundle] pathForResource:@"HistoryDataModel" ofType:@"momd"];

выполняется (модель Path является пустой строкой).

Есть идеи, что я мог сделать неправильно? Спасибо!

Ответы [ 3 ]

3 голосов
/ 22 февраля 2011

Вы можете попробовать следующий фрагмент, который сэкономит вам много времени:)

managedObjectModel = [[NSManagedObjectModel mergedModelFromBundles:nil] retain];

Возвращает модель, созданную путем слияния всех моделей, найденных во всех комплектах (параметр nil).Вы можете установить параметр для определенного массива пакетов.

1 голос
/ 22 февраля 2011

Ваша базовая модель данных уже версирована?Если нет, то правильное расширение должно быть мама

. Чтобы создать версионную модель, выберите модель и в меню запустите «Дизайн / Модель данных / Добавить версию модели».

0 голосов
/ 31 января 2013

У меня была та же проблема, и вот как я ее решил: вот мой старый код

    [self.PDFWebView loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[NSBundle mainBundle]pathForResource:pdfFileName ofType:@"pdf"]]]];

Вот мой разрешенный код:

    [self.PDFWebView loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:  [[NSBundle mainBundle]pathForResource:pdfFileName ofType:@"PDF"]]]];

Как вы можете видетьпервая строка имеет ofType: @ "pdf", а вторая - ofType: @ "pdf".Все мои PDF-файлы, включенные в приложение, заканчивались на .PDF, поэтому я получал нулевую ошибку, когда искал тип файла pdf.

Очевидная ошибка, но я думал, что IOS будет достаточно умен, чтобы проверять как .pdf, так и .PDF, но я ошибся.Возможно, это проблема, с которой столкнулся этот человек.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...