重命名xcdatamodel文件

Mus*_*afa 19 core-data ios xcode4

重命名.xcdatamodel文件需要做什么.重命名.xcdatamodel文件名,以及更改...

NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"newfilename" withExtension:@"momd"];
__managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];    
return __managedObjectModel;
Run Code Online (Sandbox Code Playgroud)

NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"newfilename.sqlite"];
Run Code Online (Sandbox Code Playgroud)

不起作用!我收到以下错误:

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'
Run Code Online (Sandbox Code Playgroud)

注意:我正在使用Xcode4.

Mic*_*han 26

有一个名为.xccurrentversion的隐藏文件,该文件应与whatever.xcdatamodeld文件位于同一位置.里面有一个对你的模型的引用,需要使用新名称进行更新.

在某些情况下,您必须从项目中删除.xcdatamodeld文件并再次添加以使其正常工作.

  • 还有`ls -a`用于显示隐藏文件。:) (2认同)
  • 哇,这真是太骇人听闻了。确实似乎让 Xcode 使用 `.xcdatamodeld` 结构更改布局/命名的唯一方法是自己在磁盘上完成,然后重新添加到 Xcode (2认同)
  • 整整 10 年之后仍然有意义! (2认同)

Bry*_*jar 22

我一直遇到与Xcode 4相同的问题.不知道Xcode 3中的行为是什么.

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

在我看来,你无法使用xcode完全重命名它.Xcode会改变你在UI中看到的包文件(momd)的名称,但在文件系统上它实际上并没有改变.

你得到的nil模型错误是因为它无法找到newfilename,因为它仍然在磁盘上有旧名称.(我猜)

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


小智 7

感谢大家帮助我最终确定了这个.以下是我在Xcode 4.2中重命名项目后修复此问题的方法:

1)删除项目中*.xcdatamodeld文件的引用.如果它像我的一样,当你选择它时,编辑器将不会加载.这告诉我重命名时链接已断开.

2)右键单击项目的.xcdoeproj文件,然后选择"显示包内容".

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

我的应用程序构建