重命名.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。
有一个名为.xccurrentversion的隐藏文件,该文件应与what.xcdatamodeld文件位于同一位置。 内部有对模型的引用,需要使用新名称对其进行更新。
在某些情况下,您必须从项目中删除.xcdatamodeld文件,然后再次添加该文件以使其起作用。
我在Xcode 4中遇到了同样的问题。不知道Xcode 3中的行为是什么。
首先,当您在xcode中添加核心数据模型时,实际上会得到一个.xcdatamodeld文件,该文件是一个类似于.xcodeproj文件的包。 在finder中,您可以右键单击它,然后单击“显示包装内容”。 您会看到它包含一个.xcdatamodel文件。
在我看来,您无法使用xcode对其进行完全重命名。 正如您在UI中看到的那样,Xcode会更改程序包文件(momd)的名称,但是在文件系统上实际上并没有更改。
您收到的nil模型错误是因为它在磁盘上仍具有旧名称,因此找不到新文件名momd。 (我猜)
我通过使用所需名称创建一个新模型来解决此问题,然后在现有模型中,单击并拖动并选择您的实体,然后将其粘贴到新模型文件中即可。 然后,您可以删除旧版本并将所有更改提交到SCM。
感谢大家的帮助,我终于确定了这一点。 在Xcode 4.2中重命名我的项目后,这是解决此问题的方法:
1)删除对项目中* .xcdatamodeld文件的引用。 如果是我的,则选择该编辑器时不会加载它。 这告诉我一个链接在重命名中断开。
2)右键单击您项目的.xcdoeproj文件,然后选择“显示软件包内容”。
3)将在那里找到的* .xcdatamodeld文件拖回到项目中。 做完了
我的应用程式建立
在XCode 4.3.2中,它成功重命名了模型文件,但是我不得不从项目中删除它,然后再次添加它以使其正常工作。 否则它会抛出
XCode 10更新和Swift 4
自XCode 4.2以来,情况可能有所改变。在以后的版本中似乎更简单,因为我只需要:
更改OLD.xcdatamodeld
到NEW.xcdatamodeld
在fileInspector离开标签
在AppDelegate
更改引用名称: let container = NSPersistentContainer(name: "NEW")
看起来资源文件中缺少momd。 您可以签入生成的.app。
确保它处于编译源构建阶段。
清理/重建有时对xcdatamodels有帮助...尤其是在创建/重命名它们时...
在我的项目中,我有一个名为Model.xcdatamodeld
的文件,我决定通过XCode将其重命名为MyModel.xcdatamodeld
。 它做得正确,但是内部文件仍称为Model.xcdatamodel
。 我无法通过XCode重命名,所以我通过朋友Finder进行了重命名。 从现在开始的问题是Xcode不再打开该文件。 然后,我只是在project.pbxproj
上搜索它,然后重命名了文件名。 现在Xcode可以完美地打开它了。
1D707FAE1FA9EBAB00A6D123 /* Model.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = MyModel.xcdatamodel; sourceTree = "<group>"; };
当然,我还必须在AppDelegate上重命名它。
构建应用程序后 ,您将无法更改应用程序捆绑包中任何文件的名称。 固定应用捆绑包后,将无法再进行任何更改。
因此,如果您想更改设备上的模型文件的名称,尤其是在用户设备上,则不能。
但是,如果您仍在开发中,只需单击文件名并进行更改即可更改Xcode中的文件名。
在Xcode 4.2中,我在项目导航器中重命名了我的模型(* .xcdatamodeld)文件(它在包中自动重命名了* .xcdatamodeld文件,并且在我的文件系统中同时重命名了这两个文件)。
在NSManagedObjectModel
initWithContentsOfURL:
中,我使用了新名称。
这导致@Mustafa在问题中描述了什么(零模型)。
因此,我尝试添加模型的新版本,从而解决了问题(即使模型没有变化)。