在NSOperation中使用ObjectID访问NSManagedObject会导致多线程违规

时间:2015-03-17 16:57:49

标签: ios core-data magicalrecord

我试图在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];

        // ... 
    }
}

我确实检查了上下文的线程和操作是否相同。任何帮助将不胜感激。

0 个答案:

没有答案