将ManagedObject子类插入Context

时间:2014-02-28 07:33:33

标签: ios core-data

我有一个托管对象子类(“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对象之后,我不想插入托管对象。

吉兹。不确定是什么与downvotes。显然我的问题措辞不好,我不知道。

2 个答案:

答案 0 :(得分:1)

Apple CoreData documentation中单独查看将显示您不需要第一个代码块。就像下面这样做:

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

就是这样。如果你还没有做到这一点,请开始学习上述文档。否则你将面临许多使用CoreData的灾难!

答案 1 :(得分:0)

第一个代码块的问题在于它不是创建NSManagedObject的常规方法。您需要为其提供一个EntityDescription,以便稍后将其插入到NSManagedObjectContext中。

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

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

当您稍后决定要插入对象时,您可以将上下文插入其中:

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