1

我的CoreData的反比關係的理解是,這兩個語句應該是等價的:CoreData逆問題

[department addEmployee:employee]; 
[employee setDepartment:department]; 

而且你只需要做其中之一。

但是,如果我這樣做:

[department addEmployee:employee]; 
NSLog(@"%@",[employee department]); 

它不會出現在的關係進行了正確更新。

做這不過這樣一來,工作正常:

[employee setDepartment:department]; 
NSLog(@"%@",[employee department]); 

我也打過電話「processPendingChanges」上的NSLog前的背景,但它不會有所作爲

回答

1

東西看起來錯關於你的代碼。您有一個方法addEmployee,但通常這種方法的命名約定是addEmployeesObject。它有一個尷尬的名字,因爲你通常指定一個像「employees」這樣的多對多關係的名字。鍵值編碼知道如何更改您的屬性名稱的大小寫,但它不知道如何將其放大。

如果您正在調用addEmployee並且沒有收到錯誤,您可能以非常規方式完成了某項操作,或者您可能正在調用一些恰好存在的不相關的方法。如果是後者,它可以解釋你的問題。

我的第二個猜測是檢查以確保你的逆是在兩個方向上定義的。也就是說,部門應該有一個僱員關係,而其反面應該被指定爲部門。員工應該有部門關係,而其反向應該被指定爲員工。我認爲如果你在XCode中使用模型編輯器,它會自動設置兩個逆向,如果你設置了一個逆向,但它可能會無意中覆蓋它,我想如果你在代碼中定義你的數據模型,你可以做到這一點。

否則,你似乎在做什麼應該工作。

1

檢查您的NSManagedObject子類(表示您的核心數據模型中的類的類),以確定這些關係與您的數據模型中的關係相匹配。例如,如果在已經爲Employee和Department NSManagedObject子類生成/編碼後向模型添加了關係,那麼這些子類將會過時並且不會反映您的模型。