2015-11-20 7 views
0

Я пытаюсь связать NSManagedObject, который я только что создал из json, в другой файл NSManagedObject, который уже сохранен, но я не могу заставить его работать.Синхронизация основных данных в Swift

В принципе, моя функция выглядит так, когда мне нужно, чтобы отобразить детали:

func downloadDetails(){context context: NSManagedObjectContext, main:MainEntity, completion() -> Void { 

    // First, I'm getting the matching object in the right context 

    if let matchingMain = try context.existingObjectWithID(show.objectID) as? MainEntity { 

    // Then, i'm making a request for the details from my main object and 
    // looping inside the json response. 
    // Problem: main and matchingMain are wiped out from memory after 
    // the first iteration, and the loop throws an error when i try to make 

    fetchDetails()   
    for detailJSON in try detailsJSON.children() { 
     let detail = new DetailFromJson(detailJson) 
     // I get an error on the second item because matchingMain data 
     // is no longer here ("data: <fault>") 
     detail.main = matchingMain   
    } 
    saveContexts() 
    completion() 
} 

Я довольно новый для этого, так что может быть неправильным путем.

Но если кто-то может объяснить мне, как сохранить данные достаточно долго, чтобы правильно их установить, было бы здорово. Благодарю.

+0

Когда вы задаете вопрос, где вы получаете сообщения об ошибках, вам действительно нужно включить эти сообщения об ошибках в вопрос. Обычно они включают в себя важные детали. –

+0

Небольшой, воспроизводящий бит кода образца также прошел бы долгий путь. Что там имеет несколько синтаксических ошибок, которые делают невозможным знать, где находится проблема, тем более, что это звучит как проблема scope/async. –

+0

ошибки не обязательно являются ошибками, но на самом деле невозможно посмотреть на ваш код и рассказать вам, что случилось, без дополнительной информации. я бы предположил, что ваш вызов получить соответствующий объект не происходит в очереди контекста. что могло бы объяснить освобождение (или, по крайней мере, оправдание того, что что-то странное происходит). – Ron

ответ

0

/// /// UPDATE

Итак, получается, вы не можете передать управляемый объект в качестве аргумента и ожидать, что она останется в памяти.

Я решил проблему, сделав запрос на выборку для моего главного управляемого внутри моей функции (и сделай все в главном контексте).

Благодарим за помощь.