2017-04-10 13 views
1

我創建了一個的NSManagedObjectContext使用:如何在Swift中從後臺線程獲取CoreData中未保存的數據?

lazy var managedObjectContext: NSManagedObjectContext = { 
    let coordinator = self.persistentStoreCoordinator 
    var managedObjectContext = NSManagedObjectContext(concurrencyType: .mainQueueConcurrencyType) 
    managedObjectContext.persistentStoreCoordinator = coordinator 
    return managedObjectContext 
}() 

然後我就與AlamoFire和回調的API調用我試圖保存父:

let objectDescription = NSEntityDescription.entity(forEntityName: "Parent", in: managedObjectContext) 
var managedObject = NSManagedObject(entity: objectDescription!, insertInto: managedObjectContext) as? Parent 

至極成功完成(耶!)

然後我做了一個API調用,讓他們的孩子和回調中,我嘗試取回父母,以便鏈接它們:

let fetchRequest:NSFetchRequest<Parent> = NSFetchRequest<Parent>(entityName: "Parent") 
fetchRequest.includesPendingChanges = true 
let result = try managedObjectContext.fetch(fetchRequest) 

現在我越來越result.count = 0 :(

這兩個CoreData的操作出現在不同的線程,我覺得這是問題...是不是真的?我該如何解決這個問題?

非常感謝你:)

回答

0

管理對象上下文常常被稱爲「便箋」。您對它所做的任何更改都只在內存中,直到您保存()它們。保存後,也如果你的背景有一個父上下文,這些變化可能仍然打不實際的DB,直到父上下文中保存,等

所以,是的,在多線程操作的核心數據是什麼原因造成的你的問題。通常的解決方案是使用單個後臺上下文來保存從服務器獲得的更改,以便這些更改相互序列化。

相關問題