0

我有兩個NSManagedObject子類,BookCategory。這兩者通過一對多的關係相關。設置一對多關係後NSFetchRequest查詢返回nil

Book方,它與Category連接的關係categories。相反Category通過books連接到Book

我的應用程序設置是每次打開應用程序時從我的服務器下載數據。下載的數據將被遍歷並保存在應用程序中。在我的應用程序中,我使用Magical Record與CoreData進行交互。

Category數據將首先被下載和後來從JSON格式保存:

{ 
    "categories" : [ 
     { 
      "id" : 1, 
      "name" : "Fiction" 
     }, 
     { 
      "id" : 2, 
      "name" : "Non-fiction" 
     } 
    ] 
} 

已經有節約Category沒有問題。雖然後來的應用程序生命週期Book數據將從JSON格式保存爲以下幾點:

{ 
    "books" : [ 
     { 
      "id" : 1, 
      "name" : "Fiction 1", 
      "category_id" : 1 
     }, 
     { 
      "id" : 2, 
      "name" : "Fiction 2", 
      "category_id" : 2 
     } 
    ] 
} 

時,我想Book關係分配到Category,就會出現問題。我的代碼分配關係:

for (NSDictionary *bookInfo in jsonObject[@"books"]) { 
    Book *book = [Book createEntity]; 
    book.identifier = bookInfo[@"id"]; 
    book.name = bookInfo[@"name"]; 

    Category *category = [Category findFirstByAttribute:@"identifier" withValue:bookInfo[@"category_id"]]; 

    book.category = category; 

    [[NSManagedObjectContext contextForCurrentThread] saveNestedContexts]; 
} 

在第一個循環中,bookObject已成功保存。但在第二個循環和下一個循環中,Category不能再被查詢。它返回零,儘管identifier是相同的。

我確實通過[Category findAll]對所有Category執行了檢查並遍歷了所有記錄,發現第二個和下一個循環中仍然存在具有相同標識的Category

問題是爲什麼findFirstByAttribute:withValue:未能在第二個循環中檢索Category

回答

1

我通過將MagicalRecord更新爲最新版本(2.1)來解決此問題。

然後我修改了我的NSManagedObject保存方法從saveNestedContexts到新增加的saveUsingCurrentThreadContextWithBlockAndWait

+0

我剛發現'saveUsingCurrentThreadContextWithBlockAndWait'在每次都會崩潰的''saveWithBlockAndWait''上面的舊版iOS 5設備上工作。感謝您的提示,@Willy。 – 2013-05-10 17:28:46