我在iOS中遇到了父/子託管對象上下文的問題。我記得一個標準的用例是使用臨時的子託管對象上下文,以便用戶可以決定按save並通過save()調用將更改傳播給父項,或者可以通過讓子項放棄用戶的更改Moc消失。從子項保存對象NSManagedObjectContext在父項中不可用
我創作的孩子是這樣的:
childMoc = NSManagedObjectContext(concurrencyType: .PrivateQueueConcurrencyType)
childMoc.parentContext = parentMoc
然後我創建一個使用
let objectInChildMoc = NSEntityDescription.insertNewObjectForEntityForName(...
我完成填充其所有必要的變量和我的閃亮的新對象後在childMoc對象幾個依賴對象,我在Swift中使用此代碼嘗試訪問父上下文中的新對象:
childMoc.performBlock({
do {
try childMoc.save()
parentMoc.performBlock({
do {
try parentMoc.save()
do {
let objectInParentMoc = try parentMoc.existingObjectWithID(objectInChildMoc.objectID) as? TheRightType
} catch {
print("Couldn't find object in parent")
}
} catch {
print("Couldn't save parent")
}
})
}
catch {
print ("Couldn't save child")
}
})
我總是得到「無法找到父對象」。我錯過了什麼?我看到使用NSManagedObjectContext保存通知的舊示例代碼,但是我讀到這些不再需要父子受管對象上下文。上面的代碼基於最新的ObjectiveC代碼,人們聲稱它的工作原理(但是使用try/catch的東西迅速拋出它)。例如,這個鏈接Correct implementation of parent/child NSManagedObjectContext暗示了上面的設置應該工作。
只是澄清 - 對象是保存在父MOC。如果我稍後進行抓取,我會找到它。因此,existingObjectWithID似乎是在父級管理對象上下文中查找對象的錯誤方法。 –
我試着跳過整個'existingObjectWithID'調用,代碼似乎一直工作,直到我們試圖刪除一個對象,然後它抱怨必須從錯誤的上下文中刪除一個對象。 –