【问题标题】:Insert ManagedObject subclass into Context将 ManagedObject 子类插入 Context
【发布时间】:2014-02-28 07:33:32
【问题描述】:

我有一个托管对象子类(“item”),它的创建方式如下:

Item *item = [[item alloc] init];
item.v1 = @"value1";
item.v2 = @"value2";
item.v3 = @"value3";

所以,现在我有了这个,我想将它插入到托管对象上下文中。我可以这样做:

Item *newitem = [NSEntityDescription insertNewObjectForEntityName:@"Item" inManagedObjectContext:_context]
newitem.v1 = item.v1;
newitem.v2 = item.v2;
newitem.v3 = item.v3;
[_context save:&error]

但肯定有更好的方法,不是吗?我不能只插入项目而不进行逐字段复制吗?

TIA

编辑:我正在为问题添加一些上下文:

关键是我已经有一个 Item 对象,我决定在它加载了大约 20 个字段的数据后插入它。我希望能够将其作为托管对象插入。在加载 Item 对象之前,我不想插入托管对象。

天啊。不知道反对票是怎么回事。显然我的问题措辞不好,我不知道。

【问题讨论】:

    标签: ios core-data


    【解决方案1】:

    看一眼Apple CoreData documentation 会告诉你你不需要第一个代码块。只需执行以下操作:

    Item *newitem = [NSEntityDescription insertNewObjectForEntityName:@"Item" inManagedObjectContext:_context]
    newitem.v1 = @"value1";
    newitem.v2 = @"value2";
    newitem.v3 = @"value3";
    [_context save:&error]
    

    就是这样。如果您到目前为止还没有完成,请开始背诵上述文档。否则你将面临 CoreData 的许多灾难!

    【讨论】:

      【解决方案2】:

      您的第一个代码块的问题在于它不是创建 NSManagedObject 的正常方式。您需要给它一个 EntityDescription 以便稍后将其插入到 NSManagedObjectContext 中。

      如果您出于某种原因需要创建不希望插入的临时 NSManagedObject,您可以通过为 context 参数传递 nil 来实现:

      NSEntityDescription *entity = [NSEntityDescription entityForName:@"MyEntity" inManagedObjectContext:myMOC];
      NSManagedObject *unassociatedObject = [[NSManagedObject alloc] initWithEntity:entity insertIntoManagedObjectContext:nil];
      

      当您稍后决定要插入对象时,您可以让上下文插入它:

      [context insertObject:unassociatedObject];
      [context save:&error];
      

      【讨论】:

      • 这就是我所追求的。谢谢 - 完美。
      • 没问题!很高兴我能帮忙。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多