nul*_*ion 2 core-data ios magicalrecord
我在主线程中创建实体Artist,然后在后台线程中传递它并与实体相册相关联.
怎么做正确?
- (IBAction)add:(id)sender
{
Artist *artist = [Artist MR_createEntity];
artist.title = @"Eminem";
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0),^{
// here a large calculation
Album *album = [Album MR_createEntity];
album.title = @"Album 1";
[artist setAlbums:[NSSet setWithArray:@[album]]];
dispatch_async(dispatch_get_main_queue(),^{
[artist.managedObjectContext MR_saveToPersistentStoreAndWait];
});
});
}
Run Code Online (Sandbox Code Playgroud)
错误:
MagicalRecordTest[2008:1803] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Illegal attempt to establish a relationship 'albums' between objects in different contexts (source = <Artist: 0x15eaa2d0>
Run Code Online (Sandbox Code Playgroud)
您违反了Core Data的主要规则之一.A NSManagedObjectContext及其关联NSManagedObject实例只能在创建它们的线程上访问.您可以传递NSManagedObjectID实例但不传递NSManagedObject实例.
此外,当您在两个NSManagedObject实例之间创建关系时; 两个实例必须是相同的,NSManagedObjectContext否则你将得到你在上面看到的错误.
而不是上面的方法,重新获取Artist块中的内容.我可以提供有关如何使用Core Data执行此操作的示例代码,但您需要研究如何使用MagicalRecord执行此操作.
| 归档时间: |
|
| 查看次数: |
1017 次 |
| 最近记录: |