Подтвердить что ты не робот

NSManagedObjectModel initWithContentsOfURL возвращает нуль, хотя модельURL действительна

моя NSManagedObjectModel возвращает нуль, хотя путь правильный.

        NSString *modelKey = [NSString stringWithFormat:@"/%@/Model", name];
    NSString *modelPath = [((Configuration *)[Configuration shared]) stringEntry:modelKey];
    NSURL *modelURL = nil;
    if ( ! [modelPath contains:@"://"] ) {
        modelPath = PathForBundleResource( modelPath );
        modelURL = [NSURL fileURLWithPath:modelPath];
    }
    NSManagedObjectModel *m = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];

NSString * PathForBundleResource (NSString * relativePath)

    NSString* resourcePath = [[NSBundle mainBundle] resourcePath];
return [resourcePath stringByAppendingPathComponent:relativePath];

У меня reset симулятор, сделал чистую сборку, но ничего не помогло.

Я новичок в программировании iPhone (в частности, основные данные).

Поблагодарили бы за любую помощь.

Изменить: я редактировал исходное сообщение относительно файла xcdatamodeld. Первоначально он не был связан правильно, но теперь он имеет и по-прежнему имеет ту же проблему.

Изменить 2: По-видимому, имя xcdatamodel имело некоторые изменения в имени xcdatamodel после привязки. Он работает сейчас. Чувство такого глупого. Не знаю, как удалить этот вопрос.

4b9b3361

Ответ 1

У меня была такая же проблема после того, как я переименовал файл .xcdatamodeld. Проблема была решена путем закрытия и повторного открытия клиента Xcode.

Ответ 2

Я просто столкнулся с этой проблемой после изменения случая имени файла .xcdatamodeld(например, refactored "mydatastore.xcdatamodeld" на "MyDatastore.xcdatamodeld" ) в файловой системе без регистра.

Исправление включает оба вышеупомянутых ответа:

  • Рефакторинг файла модели данных на совершенно другое имя, например. "MyDatastoreTemporary.xcdatamodeld"

  • Продукт > Очистка

  • Закрыть XCode. Повторно откройте XCode и проект.

  • Рефакторинг файла модели данных возвращается к его окончательному имени, например. "MyDatastore.xcdatamodeld"

  • Продукт > Очистка

  • Закрыть XCode. Повторно откройте XCode и проект.

Ответ 3

Я попробовал оба вышеупомянутых ответа, однако для меня исправлено удаление и повторное добавление файла .xcdatamodeld из/в проект Xcode. Очистка не требовалась. По какой-то причине добавление его обратно, похоже, устраняет проблему.

Ответ 4

Самый безопасный способ, если вы еще не выполнили версию вашей модели, заключается в следующем.

  • Не переименовывайте файл xcdatamodeld.
  • Вместо этого создайте новый файл модели данных с новым именем.
  • Сохраните файл пустым и закройте Xcode
  • Откройте терминал и cd (смените каталог) в свой старый каталог xcdatamodeld.
  • Внутри этого каталога должен быть каталог, заканчивающийся на xcdatamodel. Перейдите в этот каталог.
  • Внутри каталога xcdatamodel вы найдете файл с именем contents. Скопируйте этот файл в одно и то же место под вашим новым именем .xcdatamodeld/?. xcdatamodel.
  • Откройте Xcode и измените код Core Data, чтобы получить доступ к этой новой модели.
  • Построение и тестирование.
  • Удалите старый проект xcdatamodeld из вашего проекта.

Это работает с базовыми моделями, которые не имеют версий.

Ответ 5

Я решил, что проблема переделана для удаления модели .xcdatamodeld, а затем добавила ее еще раз.

Ответ 6

Когда я запускал проект в первый раз, я указал расширение как xcdatamodeld. Но это не удалось, оно должно быть momd. Но я передал нуль вместо momd, предполагая, что расширение не будет обязательным. Но с нулевым значением initWithContentsOfURL не удалось, и когда я наконец ввел momd, он отлично работал.