【发布时间】:2013-08-07 10:35:58
【问题描述】:
我正在从服务器获取数据并将它们转换为 NSManagedObject 对象数组。 该数组用于显示表格。
如何在持久存储中插入第一个元素数组peoples?
- (void)viewDidLoad
{
[self loadData];
[self insertFirstPeople];
}
- (NSManagedObjectContext *)managedObjectContext
{
if(!_managedObjectContext) _managedObjectContext = [NSManagedObjectContext MR_context];
return _managedObjectContext;
}
- (void)loadData
{
...
Network Request
...
peoples = [NSMutableArray array];
for (NSDictionary *item in items)
{
People *people = [Podcast MR_createInContext:self.managedObjectContext];
people.name = [item valueForKeyPath:@"im:name.label"];
[peoples addObject:people];
}
}
-(void)insertFirstPeople
{
People *people = peoples[0];
NSManagedObjectContext *moc = [NSManagedObjectContext MR_defaultContext];
[moc insertObject:people]
[moc MR_saveToPersistentStoreAndWait];
}
错误:
An NSManagedObject may only be in (or observed by) a single NSManagedObjectContext.
【问题讨论】:
-
您是否打算使用两个不同的托管对象上下文?您真的只想要在默认上下文中插入的 first People 对象吗?在后台上下文中创建的其他对象呢?
-
是的。我想使用两个上下文。第一个只建表,第二个保存持久化存储
-
好的,但是你想将 all People 对象保存到持久存储中还是只保存 first 对象?
-
只有第一个对象
-
这可能很难/不可能。您可以将对象从一个上下文转移到另一个上下文(例如使用
[people MR_inContext:[NSManagedObjectContext MR_defaultContext]]),但这仅在对象已保存时才有效。保存背景上下文将保存 all 对象。更准确地说,由于背景上下文是默认上下文的子上下文,保存背景上下文意味着所有插入的对象都插入到默认上下文中。