【问题标题】:Editing a Custom Object with Core Data and Magical Record使用 Core Data 和 Magical Record 编辑自定义对象
【发布时间】:2013-07-22 21:58:22
【问题描述】:

如果我有一个 List 对象和一个 ListItem 对象,并且 List 与 ListItem 具有一对多的关系,那么编辑列表的最佳设计是什么?我用

获取列表
// Find the list we're supposed to edit
        temporaryList = [List MR_findFirstByAttribute:@"uniqueID" withValue:_editingListID];

然后可以更新其简单属性,例如名称

        temporaryList.name = @"new name";

但是我想知道如何最好地更新它的 listItems。它根据核心数据结构存储在 NSSet 中,我在创建新列表时将每个 ListItem 存储为以下内容。

ListItem *listItem = [ListItem MR_createInContext:_managedObjectContext];

所以,当我去编辑 List 的内容时,我想重置 ListItems 的 NSSet

// something like
list.contents = nil;
list.contents = mynewarrayoflistitems

但是我还需要一种方法来删除保存在内存中的旧 ListItems。我该怎么办?我的第一个想法是删除正在编辑的列表(这将导致级联效应发生,并将删除所有 ListItems,然后重置所有列表的内容、名称、id 等。这是最佳实践吗? ?

【问题讨论】:

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


    【解决方案1】:

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

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

    list.contents = nil;
    

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

    但是你可以反过来:如果删除规则为反向关系 从ListListItem 设置为“Nullify”,然后删除列表项将删除 它来自关系,因此您可以遍历 list.contents 并删除所有相关 对象。

    这样做的好处是保留了List 对象本身。然后你可以创建 新项目并将它们添加到列表中。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-15
    • 1970-01-01
    • 1970-01-01
    • 2015-09-14
    • 2014-09-27
    • 1970-01-01
    相关资源
    最近更新 更多