如果我有一个List对象和一个ListItem对象,并且List与ListItem有一对多的关系,那么编辑列表似乎是最好的设计?我用
获取列表// Find the list we're supposed to edit
temporaryList = [List MR_findFirstByAttribute:@"uniqueID" withValue:_editingListID];
然后可以更新其简单属性,例如名称
temporaryList.name = @"new name";
然而,我想知道如何最好地更新其listItems。它根据Core Data结构存储在NSSet中,并在创建新列表时使用以下内容存储每个ListItem。
ListItem *listItem = [ListItem MR_createInContext:_managedObjectContext];
所以,当我去编辑List的内容时,我想重置它的ListSet的NSSet
// something like
list.contents = nil;
list.contents = mynewarrayoflistitems
但是我还需要一种方法来删除保存在内存中的旧ListItem。我该怎么办呢?我的第一个想法是删除正在编辑的列表(这将导致发生casacade效果,并将删除所有ListItems,然后重置所有列表的内容,名称,ID等。这是最佳实践?
答案 0 :(得分:1)
正如您已经注意到的,级联删除规则仅在对象已删除时应用。例如,如果删除list
,则还会删除所有相关的listItem
对象。
如果contents
是从List
到ListItem
的多对多关系,那么
list.contents = nil;
不应用任何删除规则,也不会删除以前相关的对象。
但你可以走另一条路:如果删除规则为反向关系
从List
到ListItem
设置为“Nullify”,然后删除列表项将删除
它来自关系,所以你可以迭代list.contents
并删除所有相关的
对象。
这具有保留List
对象本身的优点。然后你就可以创造了
新项目并将其添加到列表中。