重命名xcdatamodel文件

时间:2011-04-11 12:22:03

标签: ios core-data xcode4

重命名.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。

10 个答案:

答案 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以来,事情可能有所改变 在更高版本中似乎更简单,因为我只需要:

  1. 在fileInspector左标签中将OLD.xcdatamodeld更改为NEW.xcdatamodeld

  2. 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。