我有一个托管对象子类(“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。显然我的问题措辞不好,我不知道。
答案 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];