你可能注意到我們從1對(duì)多關(guān)系中獲得的NSSet是不可修改的.增加1個(gè)對(duì)象到to-many不可修改的關(guān)系的NSSet需要?jiǎng)?chuàng)建1個(gè)NSSet可修改的副本,然后添加1個(gè)新的對(duì)象到NSMutableSet中,然后將NSMutableSet設(shè)置回原來(lái)的父對(duì)象中去.
這是1個(gè)痛苦的進(jìn)程,而且榮幸的是毫無(wú)必要的!
當(dāng)你需要添加1個(gè)對(duì)象到to-many關(guān)系時(shí),我們可使用mutableSetValueForKey代替valueForKey.該方法為關(guān)聯(lián)的父對(duì)象返回1個(gè)NSMutableSet并且大大簡(jiǎn)化我們的代碼:
let newIngredient = ...
let recipe = ...
let ingredients = recipe.mutableSetValueForKey("ingredients") ingredients.addObject(newIngredient)
注意我們不需要將NSMutableSet設(shè)置回原來(lái)的entity中去,因此向to-many關(guān)系中添加對(duì)象變得非常簡(jiǎn)單.
還有很重要的1點(diǎn)是注意這些設(shè)置關(guān)系的代碼更新CoreData中對(duì)象的關(guān)系時(shí),我們只需要更新1邊.由于我們定義了這些方法為雙向的(double-sided)(這意味著我們包括了反向的關(guān)系),CoreData處理保持關(guān)系的完全性,當(dāng)我們更新關(guān)系的1邊時(shí),CoreData自動(dòng)為我們?cè)O(shè)置關(guān)系的另外一邊.