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

Переименуйте файл xcdatamodel

Что нужно сделать, чтобы переименовать файл .xcdatamodel. Переименование имени файла .xcdatamodel вместе с изменением...

NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"newfilename" withExtension:@"momd"];
__managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];    
return __managedObjectModel;

и

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

не работает! Я получаю следующую ошибку:

2011-04-11 17:19:54.164 ProjectName[5826:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Cannot create an NSPersistentStoreCoordinator with a nil model'
*** Call stack at first throw:
(
    0   CoreFoundation                      0x00fa15a9 __exceptionPreprocess + 185
    1   libobjc.A.dylib                     0x010f5313 objc_exception_throw + 44
    2   CoreData                            0x00013853 -[NSPersistentStoreCoordinator initWithManagedObjectModel:] + 419
    3   ProjectName                         0x00003471 -[ProjectNameAppDelegate persistentStoreCoordinator] + 257
    4   ProjectName                         0x000031a4 -[ProjectNameAppDelegate managedObjectContext] + 100
    5   ProjectName                         0x000028ca -[ProjectNameAppDelegate makeSplitViewController] + 762
    6   ProjectName                         0x00002d44 -[ProjectNameAppDelegate application:didFinishLaunchingWithOptions:] + 68
    7   UIKit                               0x001f3c89 -[UIApplication _callInitializationDelegatesForURL:payload:suspended:] + 1163
    8   UIKit                               0x001f5d88 -[UIApplication _runWithURL:payload:launchOrientation:statusBarStyle:statusBarHidden:] + 439
    9   UIKit                               0x00200617 -[UIApplication handleEvent:withNewEvent:] + 1533
    10  UIKit                               0x001f8abf -[UIApplication sendEvent:] + 71
    11  UIKit                               0x001fdf2e _UIApplicationHandleEvent + 7576
    12  GraphicsServices                    0x018f9992 PurpleEventCallback + 1550
    13  CoreFoundation                      0x00f82944 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 52
    14  CoreFoundation                      0x00ee2cf7 __CFRunLoopDoSource1 + 215
    15  CoreFoundation                      0x00edff83 __CFRunLoopRun + 979
    16  CoreFoundation                      0x00edf840 CFRunLoopRunSpecific + 208
    17  CoreFoundation                      0x00edf761 CFRunLoopRunInMode + 97
    18  UIKit                               0x001f57d2 -[UIApplication _run] + 623
    19  UIKit                               0x00201c93 UIApplicationMain + 1160
    20  ProjectName                         0x00002599 main + 121
    21  ProjectName                         0x00002515 start + 53
)
terminate called after throwing an instance of 'NSException'

Примечание. Я использую Xcode4.

4b9b3361

Ответ 1

У меня была такая же проблема с Xcode 4. Не знаю, что такое поведение в Xcode 3.

Во-первых, когда вы добавляете базовую модель данных в xcode, вы фактически получаете файл .xcdatamodeld, который представляет собой пакет, такой как файл .xcodeproj. В Finder вы можете щелкнуть правой кнопкой мыши и "Показать содержимое пакета". Вы увидите, что он содержит файл .xcdatamodel.

Мне кажется, вы не можете полностью переименовать его с помощью xcode. Xcode изменит имя файла пакета (momd), как вы видите его в пользовательском интерфейсе, но в файловой системе он фактически не изменился.

Ошибка модели nil, потому что она не может найти newfilename momd, поскольку она все еще имеет старое имя на диске. (Я думаю)

Я работал над этим, создав новую модель с именем, которое я хотел, затем в существующей модели вы можете щелкнуть мышью и выбрать свои сущности, а затем просто вставить их в новый файл модели. Затем вы можете удалить старый и зафиксировать все изменения в своем SCM.

Ответ 2

Существует скрытый файл с именем .xccurrentversion, который должен находиться в том же месте, что и ваш файл whatever.xcdatamodeld. Внутри есть ссылка на вашу модель, которая должна быть обновлена ​​с новым именем.

В некоторых случаях вам придется удалить файл .xcdatamodeld из проекта и добавить его снова, чтобы он работал.

Ответ 3

Спасибо вам всем за то, что помогли мне наконец прибить это. Вот как я исправил это после переименования моего проекта в Xcode 4.2:

1) Удалите ссылку на файл *.xcdatamodeld в своем проекте. Если он мне нравится, редактор не будет загружаться при его выборе. Это говорит о том, что в переименовании была нарушена ссылка.

2) Щелкните правой кнопкой мыши файл .xcdoeproj для вашего проекта и выберите "Показать содержимое пакета".

3) Перетащите файл *.xcdatamodeld, который вы найдете там, в свой проект. Готово.

My app buil

Ответ 4

В XCode 4.3.2 он успешно переименовывает файл модели, но мне пришлось удалить его из проекта и добавить его снова, чтобы он работал. В противном случае он метался

Ответ 5

Похоже, мама отсутствует в файлах ресурсов. Вы можете проверить созданный файл .app.

Убедитесь, что он находится в фазе сборки источников компиляции.

И clean/rebuild иногда помогает с xcdatamodels... Особенно при создании/переименовании их...

Ответ 6

Вы не можете изменить имя какого-либо файла в пакете приложений после, созданного приложением. Как только пакет приложений исправлен, его вообще нельзя изменить.

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

Однако, если вы все еще в разработке, просто измените имя файла в Xcode, щелкнув имя файла и изменив его.

Ответ 7

В Xcode 4.2 я переименовал файл моей модели (*.xcdatamodeld) в навигаторе проекта (он автоматически переименовал файл *.xcdatamodel внутри пакета и оба файла в моей файловой системе).

В initWithContentsOfURL: NSManagedObjectModel я использовал новое имя.

Это привело к тому, что @Mustafa описывает в вопросе (модель nil).

Итак, я попробовал добавить новую версию моей модели и решил проблему (хотя у меня не было изменений в моей модели).

Ответ 8

В моем случае у меня был файл с именем Model.xcdatamodeld в моем проекте, я решил переименовать его в MyModel.xcdatamodeld через XCode. Он сделал правильно, однако внутренний файл все еще назывался Model.xcdatamodel. Я не мог переименовать его через XCode, поэтому я сделал это через своего друга Finder. Проблема с этого момента заключалась в том, что Xcode больше не открывал этот файл. Тогда я просто искал его на project.pbxproj и переименовал имя файла. Теперь Xcode может открыть его отлично.

1D707FAE1FA9EBAB00A6D123 /* Model.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = MyModel.xcdatamodel; sourceTree = "<group>"; };

Конечно, мне также пришлось переименовать его в AppDelegate.