【发布时间】:2014-12-16 14:36:49
【问题描述】:
我的实体上有允许我将 JSON 解析为实体的类别:
- (id) populateFromJson: (NSDictionary *) json {
...
}
那么使用 MagicalRecord 我可以做到这一点:
MyEntity *e = [My MR_createInContext:localContext];
[e populateFromJson:json];
但是,在我将其解析为实体后,我需要检查它是否已存在于主上下文中,即检查是否存在重复项。如果它已经存在于主上下文中,我不想将它插入到上下文中,但是我找不到使用 MagicalRecord 创建实体作为上下文的一部分的方法,但不要插入到该上下文中。
在核心数据中你可以这样做:
MyEntity *e = [[MyEntity alloc] initWithEntity:[NSEntityDescription entityForName:@"MyEntity" inManagedObjectContext:[NSManagedObjectContext MR_defaultContext]] insertIntoManagedObjectContext:nil];
将 nil 传递给要插入的上下文。
然后,如果不是重复,您可以:
[localContext insertObject:e];
是我遗漏了什么,还是在 MagicalRecord 中没有办法做到这一点?
【问题讨论】:
-
您的
MyEntity *e = [[MyEntity alloc] initWithEntity ...创建对象而不将其插入上下文。正如您前面的文字所暗示的那样,该对象不是“上下文的一部分”。即使使用 MagicalRecord,您也可以调用所有 Core Data 方法,但我假设您会得到与MyEntity *e = [My MR_createInContext:nil]相同的结果。 -
MyEntity *e = [My MR_createInContext:nil] 引发异常。这是因为 MR 尝试使用 nil 作为实体的上下文以及要插入的上下文。我的代码只使用 nil 作为插入的上下文。
标签: ios core-data magicalrecord