2012-08-03 40 views
3

我花了數天的時間嘗試解決此問題的所有可能的解決方案,但似乎沒有任何解決方法。在覈心數據中使用多個上下文時出現錯誤133000

我運行一個後臺線程這樣的:

[MagicalRecord saveInBackgroundWithBlock:^(NSManagedObjectContext *localContext) { 

        Media *localMedia = [media inContext:localContext]; 

        UIImage *image = localMedia.thumbnail; 


        dispatch_async(dispatch_get_main_queue(), ^{ 

         [thumbnails setObject:image forKey:[NSNumber numberWithInt:i]]; 
         [contentDict setObject:thumbnails forKey:@"MediaItems"]; 
         [cell.entryView setNeedsDisplay]; 
        }); 

       }]; 

或者這樣:

dispatch_queue_t cellSetupQueue = dispatch_queue_create("com.Journalized.SetupTimelineThumbnails", NULL); 
      dispatch_async(cellSetupQueue, ^{ 

       NSManagedObjectContext *newMoc = [[NSManagedObjectContext alloc] init]; 
       NSPersistentStoreCoordinator *coordinator = [NSManagedObjectContext contextForCurrentThread].persistentStoreCoordinator; 
       [newMoc setPersistentStoreCoordinator:coordinator]; 

       NSNotificationCenter *notify = [NSNotificationCenter defaultCenter]; 
       [notify addObserver:self 
          selector:@selector(mergeChanges:) 
           name:NSManagedObjectContextDidSaveNotification 
          object:newMoc]; 

Media *localMedia = [media inContext:[NSManagedObjectContext contextForCurrentThread]; 

         UIImage *image = localMedia.thumbnail; 


         dispatch_async(dispatch_get_main_queue(), ^{ 

          [thumbnails setObject:image forKey:[NSNumber numberWithInt:i]]; 
          [contentDict setObject:thumbnails forKey:@"MediaItems"]; 
          [cell.entryView setNeedsDisplay]; 
         }); 

        }]; 

這兩個給我一個崩潰與返回的UIImage如無物,和Cocoa Error 133000

我已經刪除了所有其他背景線程代碼,並且直接保存在主線程中,以確保它的正確性。在主線程上運行上面的代碼也可以,但凍結了我的用戶界面。儘管做了所有這些努力,上面的代碼每次都會崩潰。

我不確定該做什麼該怎麼做。

編輯:

我的問題,具體是怎麼做的我做這項工作沒有崩潰?這似乎是來自另一個上下文中不存在的對象的問題,但是如何讓它們存在於另一個上下文中?

+0

你的問題是?你正在使用RestKit?而且你的代碼片段非常不完整 - 我無法追蹤任何內容。觀察者方法幾乎肯定不是你想要的,第一個例子可能因saveInBackgroundWithBlock內部的東西而崩潰: – 2012-08-03 13:37:43

+0

這可能是因爲核心數據不是線程安全的。你嘗試過[localContext performBlock:^ {}]; – 2012-08-03 14:42:35

+0

@PauldeLange我沒有使用RestKit,沒有。我應該以觀察者方法取得什麼? – Andrew 2012-08-03 15:13:22

回答

1

快速回答:

NSManagedObjectReferentialIntegrityError = 133000 //試圖解僱指向的對象不存在故障(我們可以看到店內,我們無法看到的對象)

編輯: 很難從代碼中看到某些東西。什麼是管理對象?

我想問題是你在另一個上下文中使用來自一個上下文的臨時對象。

+0

公平地說,從來沒有問題,但這也不是一個答案。 – 2012-08-03 13:42:30

+0

@PauldeLange我的印象是,他甚至不知道錯誤代碼是什麼意思,因此添加錯誤描述是甚至在查看代碼之前的第一件事。 – Sulthan 2012-08-03 13:45:08

+0

我如何使對象不是臨時的? – Andrew 2012-08-03 14:22:47

2

請記住,MR_inContext:方法在封面下使用[NSManagedObjectContext objectWithID:]方法。你應該看看在那裏,以確保您的對象有:

1)被混進後臺背景/塊在你的第一個代碼塊 2)該方法返回一些有用的東西

我之前保存也不知道你如何設置你的縮略圖屬性。理想情況下,只要你有NST變形代碼寫入就可以了(在互聯網上有示例說明如何使用可變形屬性將UIImage保存在覈心數據中)

此外,你的代碼應該看起來像這樣:

UIImage *image = nil; 
[MagicalRecord saveInBackgroundWithBlock:^(NSManagedObjectContext *localContext) { 

    Media *localMedia = [media inContext:localContext]; //remember, this looks up an existing object. If your context is a child of a parent context that has contains this, the localContext should refresh the object from the parent. 

    //image processing/etc 

    image = localMedia.thumbnail; 

} completion:^{    

    [thumbnails setObject:image forKey:@(i)]; //new literals are teh awesome 
    contentInfo[@"MediaItems"] = thumbnails; //as is the new indexer syntax (on the latest compiler) 

    [cell.entryView setNeedsDisplay]; 

}]; 
+0

「在進入第一個代碼塊中的背景上下文/塊之前已保存」是我的問題。在我的後臺線程中,我正在獲取尚未保存在主線程中的項目。 – kabucey 2013-05-27 04:01:25

相關問題