使用GCD和MagicalRecord时出现臭名昭着的错误133000

时间:2012-11-25 17:26:07

标签: multithreading core-data grand-central-dispatch magicalrecord

核心数据和多线程:

  1. 保存在一个上下文中
  2. 等待完成
  3. 抓取对象ID并从其他上下文中请求它。
  4. 我收到错误133000,后台线程上的对象为NIL。好像保存没有完成。为什么呢?

        __block ChapterData *ch1;
         [MagicalRecord saveInBackgroundWithBlock:^(NSManagedObjectContext *localContext) {
            ch1 = [ChapterData MR_createInContext:localContext];
            ch1.name = @"My Chapter";
        } completion:^{
            dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
                NSError *error;
                NSManagedObject *ch2ByObjectId = [[NSManagedObjectContext MR_contextForCurrentThread] existingObjectWithID:ch1.objectID error:&error];
                GHAssertNotNil(ch2ByObjectId, @"Ch2 by Ch1 object id is NIL");
            });
    
        }];
    

    根据我的理解,这应该有效,但它没有通过断言。

1 个答案:

答案 0 :(得分:0)

我不确定你是否还有这个问题,但是我的回复是:你实际上并没有在ManagedObjectContext上调用save方法。您只是要求在“localContext”中创建对象,但不执行保存。