将时间戳属性添加到iphonecoredatarecipes示例代码的成分

时间:2014-04-24 12:08:00

标签: ios objective-c core-data iphonecoredatarecipes

对于这么简单的问题,我真的很抱歉,但我尝试了几种方法,无法找到解决方案。

我只想在配料实体中添加时间戳属性。每当我更改recipes.xcdatamodel时,我都会得到:

  

错误NSError域:@“NSCocoaErrorDomain” - 代码:134100 0x000000010c162890

我已经尝试过模型版本,并且:

options:@{NSMigratePersistentStoresAutomaticallyOption:@YES,
NSInferMappingModelAutomaticallyOption:@YES}

代码是Apple提供的原创代码!

1 个答案:

答案 0 :(得分:0)

在Project Navigator中选择您的.xcdatamodeld文件。

在菜单选项"编辑器"下,选择"添加模型版本"。

将创建数据模型文件的新副本。

在这个新副本中,为简单起见,我们将其称为版本2,您需要添加一个属性来存储时间。

.xcdatamodeld文件的版本2中(我在这里注意 - 小心选择新文件而不是旧文件)添加属性,调用它" timeStamp",设置输入"日期",然后保存。

现在,当您运行示例项目时,您已经包含在"核心数据堆栈中的迁移选项"将存储的信息从旧的.xcdatamodeld文件迁移到该文件的版本2.

另请参阅...... Core Data; Cocoa error 134100

<强>更新

我加载了iPhoneCoreDataRecipes示例代码,然后按照这些步骤...

  • 添加了新版本的数据模型(如上所述),
  • 在新版本的数据模型中,非常小心地确定它是我正在修改的新模型,添加了一个属性&#34; timeStamp&#34;到实体&#34;成分&#34;,
  • Ingredient.m文件,添加了@dynamic timeStamp
  • Ingredient.h文件,添加了@property (nonatomic, retain) NSDate *timeStamp;
  • RecipesAppDelegate.m文件,添加了以下代码行......

    NSMutableDictionary *options = [NSMutableDictionary dictionary];
    [options setValue:[NSNumber numberWithBool:YES]
               forKey:NSMigratePersistentStoresAutomaticallyOption];
    [options setValue:[NSNumber numberWithBool:YES]
               forKey:NSInferMappingModelAutomaticallyOption];
    
  • 更改了此行代码以包含我上面提到的选项

    if (![persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeUrl options:options error:&error]) {
    

并执行了Build&amp;运行

我遇到了不同的消息......

Can't merge models with two different entities named 'Ingredient'

这触发了我需要更改这行代码的内存,

managedObjectModel = [[NSManagedObjectModel mergedModelFromBundles:nil] retain];    

这两行代码......

NSURL *modelURL = [[NSBundle mainBundle] URLForResource:classPersistentStore withExtension:@"momd"];
managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:self.modelURL];

这对我来说没有错误加载。

请按照以下步骤操作 - 也应该适合您。