重命名xcdatamodel文件

问题描述 投票:19回答:9

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

ios core-data xcode4
9个回答
25
投票

有一个名为.xccurrentversion的隐藏文件,该文件应与what.xcdatamodeld文件位于同一位置。 内部有对模型的引用,需要使用新名称对其进行更新。

在某些情况下,您必须从项目中删除.xcdatamodeld文件,然后再次添加该文件以使其起作用。


22
投票

我在Xcode 4中遇到了同样的问题。不知道Xcode 3中的行为是什么。

首先,当您在xcode中添加核心数据模型时,实际上会得到一个.xcdatamodeld文件,该文件是一个类似于.xcodeproj文件的包。 在finder中,您可以右键单击它,然后单击“显示包装内容”。 您会看到它包含一个.xcdatamodel文件。

在我看来,您无法使用xcode对其进行完全重命名。 正如您在UI中看到的那样,Xcode会更改程序包文件(momd)的名称,但是在文件系统上实际上并没有更改。

您收到的nil模型错误是因为它在磁盘上仍具有旧名称,因此找不到新文件名momd。 (我猜)

我通过使用所需名称创建一个新模型来解决此问题,然后在现有模型中,单击并拖动并选择您的实体,然后将其粘贴到新模型文件中即可。 然后,您可以删除旧版本并将所有更改提交到SCM。


7
投票

感谢大家的帮助,我终于确定了这一点。 在Xcode 4.2中重命名我的项目后,这是解决此问题的方法:

1)删除对项目中* .xcdatamodeld文件的引用。 如果是我的,则选择该编辑器时不会加载它。 这告诉我一个链接在重命名中断开。

2)右键单击您项目的.xcdoeproj文件,然后选择“显示软件包内容”。

3)将在那里找到的* .xcdatamodeld文件拖回到项目中。 做完了

我的应用程式建立


3
投票

在XCode 4.3.2中,它成功重命名了模型文件,但是我不得不从项目中删除它,然后再次添加它以使其正常工作。 否则它会抛出


1
投票

XCode 10更新和Swift 4

自XCode 4.2以来,情况可能有所改变。在以后的版本中似乎更简单,因为我只需要:

  1. 更改OLD.xcdatamodeldNEW.xcdatamodeld在fileInspector离开标签

  2. AppDelegate更改引用名称: let container = NSPersistentContainer(name: "NEW")


1
投票

看起来资源文件中缺少momd。 您可以签入生成的.app。

确保它处于编译源构建阶段。

清理/重建有时对xcdatamodels有帮助...尤其是在创建/重命名它们时...


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


0
投票

构建应用程序 ,您将无法更改应用程序捆绑包中任何文件的名称。 固定应用捆绑包后,将无法再进行任何更改。

因此,如果您想更改设备上的模型文件的名称,尤其是在用户设备上,则不能。

但是,如果您仍在开发中,只需单击文件名并进行更改即可更改Xcode中的文件名。


0
投票

在Xcode 4.2中,我在项目导航器中重命名了我的模型(* .xcdatamodeld)文件(它在包中自动重命名了* .xcdatamodeld文件,并且在我的文件系统中同时重命名了这两个文件)。

NSManagedObjectModel initWithContentsOfURL:中,我使用了新名称。

这导致@Mustafa在问题中描述了什么(零模型)。

因此,我尝试添加模型的新版本,从而解决了问题(即使模型没有变化)。

© www.soinside.com 2019 - 2024. All rights reserved.