使用核心数据和魔法记录编辑自定义对象

时间:2013-07-23 17:18:53

标签: ios objective-c sqlite core-data magicalrecord

如果我有一个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等。这是最佳实践?

1 个答案:

答案 0 :(得分:1)

正如您已经注意到的,级联删除规则仅在对象已删除时应用。例如,如果删除list,则还会删除所有相关的listItem对象。

如果contents是从ListListItem的多对多关系,那么

list.contents = nil;

不应用任何删除规则,也不会删除以前相关的对象。

但你可以走另一条路:如果删除规则为反向关系 从ListListItem设置为“Nullify”,然后删除列表项将删除 它来自关系,所以你可以迭代list.contents并删除所有相关的 对象。

这具有保留List对象本身的优点。然后你就可以创造了 新项目并将其添加到列表中。