重命名.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。
答案 0 :(得分:24)
有一个名为.xccurrentversion的隐藏文件,该文件应与whatever.xcdatamodeld文件位于同一位置。在里面有一个模型的引用,需要使用新名称进行更新。
在某些情况下,您必须从项目中删除.xcdatamodeld文件并再次添加以使其正常工作。
答案 1 :(得分:22)
我遇到了与Xcode 4相同的问题。不知道Xcode 3中的行为是什么。
首先,当您在xcode中添加核心数据模型时,实际上会获得一个.xcdatamodeld文件,它是一个类似.xcodeproj文件的包。在finder中,您可以右键单击它并“显示包内容”。 你会看到它包含一个.xcdatamodel文件。
在我看来,你无法使用xcode完全重命名它。 Xcode将在UI中看到更改包文件(momd)的名称,但在文件系统上它实际上没有更改。
你得到的nil模型错误是因为它无法找到新文件名,因为它仍然在磁盘上有旧名称。 (我猜)
我通过使用我想要的名称创建一个新模型来解决这个问题,然后在现有模型中,您可以单击并拖动并选择您的实体,然后将它们粘贴到新模型文件中。然后,您可以删除旧的并将所有更改提交到SCM。
答案 2 :(得分:7)
感谢大家帮助我最终确定了这个。以下是我在Xcode 4.2中重命名项目后修复此问题的方法:
1)删除项目中* .xcdatamodeld文件的引用。如果它像我的一样,当你选择它时,编辑器将不会加载。这告诉我重命名链接已被破坏。
2)右键单击项目的.xcdoeproj文件,然后选择“显示包内容”。
3)将您在那里找到的* .xcdatamodeld文件拖回到项目中。完成。
我的应用内容
答案 3 :(得分:3)
在XCode 4.3.2中,它成功重命名了模型文件,但我不得不将其从项目中删除并再次添加以使其工作。否则就是扔了
答案 4 :(得分:1)
在资源文件中看起来像妈妈一样。您可以签入生成的.app。
确保它处于编译源构建阶段。
清理/重建有时会对xcdatamodels有帮助......尤其是在创建/重命名它们时......
答案 5 :(得分:1)
XCode 10更新和Swift 4
自XCode 4.2以来,事情可能有所改变 在更高版本中似乎更简单,因为我只需要:
在fileInspector左标签中将OLD.xcdatamodeld
更改为NEW.xcdatamodeld
在AppDelegate
中只需更改引用名称:let container = NSPersistentContainer(name: "NEW")
答案 6 :(得分:0)
在构建应用 之后,您无法更改应用包 中任何文件的名称。应用程序包修复后,根本无法更改。
所以,如果你想在设备上更改模型文件的名称,特别是在用户的设备上,那么你不能。
但是,如果您仍在开发中,只需通过单击文件名并更改它来更改Xcode中文件的名称。
答案 7 :(得分:0)
在Xcode 4.2中,我在项目导航器中重命名了我的模型(* .xcdatamodeld)文件(它自动重命名为包内的* .xcdatamodel文件,以及我文件系统中的两个文件)。
在initWithContentsOfURL:
的{{1}}中,我使用了新名称。
这导致 @Mustafa 在问题(nil模型)中描述的内容。
所以我尝试添加我的模型的新版本,它解决了问题(即使我的模型没有变化)。
答案 8 :(得分:0)
在我的案例中,我的项目中有一个名为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上重命名它。
答案 9 :(得分:0)
这可以通过以下方式完成:在XCode中打开.xcdatamodeld
。在检查器面板中,转到“身份和类型”部分。在Full Path
字段中,单击完整路径旁边的箭头图标。在Finder中,复制要重命名的xcdatamodel。将重复项重命名为所需的名称。返回Xcode,单击Location
字段旁边的目录图标。选择您重命名为所需名称的xcdatamodel副本,然后单击Choose
。您可以根据需要删除旧的原始xcdatamodel。