我试图在NSOperation子类中使用MagicalRecord获取对象。我很清楚NSManagedObject不会在线程之间传递,所以我只是从他的NSManagedObjectID中获取它。
这非常有效,但当我启用" com.apple.CoreData.ConcurrencyDebug 1"我得到了一个名副其实的例外:
CoreData + [NSManagedObjectContext__Multithreading_Violation_AllThatIsLeftToUsIsHonor __]:
以下是我用于操作的代码:
@interface UserOperation : NSOperation
- (instancetype)initWithUserObjectId:(NSManagedObjectID*) u;
@end
实施:
@interface UserOperation()
@property (nonatomic, retain) NSManagedObjectID * userId;
@end
@implementation UserOperation
- (instancetype)initWithUserObjectId:(NSManagedObjectID*) u{
if (self = [super init]) {
_userId = u;
}
return self;
}
- (void)main{
if(_userId){
NSManagedObjectContext * privateContext = [NSManagedObjectContext MR_context];
// Exception happen here :
User * currentUser = (User *)[privateContext objectWithID:_userId];
// ...
}
}
我确实检查了上下文的线程和操作是否相同。任何帮助将不胜感激。