0

У меня есть два подкласса NSManagedObject, Book и Category. Эти два связаны отношениями «один ко многим».Запрос NSFetchRequest возвращает nil после установки отношения один к другому

Book сторона, имеет отношение categories подключен к Category. Непосредственно Category подключен к Book через books.

Моя установка приложения - это загрузка данных с моего сервера при каждом открытии приложения. Загруженные данные будут перемещены и сохранены в приложении. В моем приложении я использую 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 через [Category findAll] и прошел все записи и обнаружил, что Category с тем же идентификатором все еще существуют во втором и следующем циклах.

Вопрос в том, почему findFirstByAttribute:withValue: не удалось получить Category во втором цикле?

ответ

1

Я исправил эту проблему, обновив MagicalRecord до последней версии (2.1).

И после этого я изменил способ мой NSManagedObject метод сохранения от saveNestedContexts к вновь добавленному saveUsingCurrentThreadContextWithBlockAndWait.

+0

Я только что обнаружил, что 'saveUsingCurrentThreadContextWithBlockAndWait' работал на более старых устройствах iOS 5, где' saveWithBlockAndWait' сбой каждый раз. Спасибо за совет, @Willy. –

Смежные вопросы