objective-c - 删除核心数据对象不会取消其所有关系吗?

标签 objective-c cocoa core-data nsnotificationcenter nsmutableset

我有一个名为 Task 的实体,它与实体 TaskTemplateOccurrence 具有一对一关系。这两个实体都与任务有一对多关系。删除规则设置为无效。

在一次事件中,我尝试删除所有任务。为此,我使用以下代码:

- (bool)removeAllTasks
{
    NSMutableSet *tasks = [self mutableSetValueForKey:@"tasks"];
    [tasks removeAllObjects];
    return YES;
}

这不起作用。以下是尝试删除之前的任务和发生情况:

Relationship 'tasks' on managed object (0x1006bd1c0) <Occurrence: 0x1006bd1c0> (entity: Occurrence; id: 0x102119510 <x-coredata://6A0ECEF9-473D-44B2-9E89-AC15179D7761/Occurrence/p1> ; data: {
    ... bunch of properties ...
    taskType = "0x10211a020 <x-coredata://6A0ECEF9-473D-44B2-9E89-AC15179D7761/TaskTemplate/p2>";
    tasks =     (
        "0x1021185e0 <x-coredata://6A0ECEF9-473D-44B2-9E89-AC15179D7761/Task/p3>"
    );
}) with objects {(
    <Task: 0x10c31d700> (entity: Task; id: 0x1021185e0 <x-coredata://6A0ECEF9-473D-44B2-9E89-AC15179D7761/Task/p3> ; data: {
    ... some more properties ...
    occurrence = "0x102119510 <x-coredata://6A0ECEF9-473D-44B2-9E89-AC15179D7761/Occurrence/p1>";
    persons = "<relationship fault: 0x10e049e90 'persons'>";
    startDate = "2013-01-28 11:00:00 +0000";
    type = "0x10211a020 <x-coredata://6A0ECEF9-473D-44B2-9E89-AC15179D7761/TaskTemplate/p2>";
})
)}

...这是 -removeAllObjects 之后的结果:

Relationship 'tasks' on managed object (0x1006bd1c0) <Occurrence: 0x1006bd1c0> (entity: Occurrence; id: 0x102119510 <x-coredata://6A0ECEF9-473D-44B2-9E89-AC15179D7761/Occurrence/p1> ; data: {
    ... bunch of properties ...
    taskType = "0x10211a020 <x-coredata://6A0ECEF9-473D-44B2-9E89-AC15179D7761/TaskTemplate/p2>";
    tasks =     (
    );
}) with objects {(
)}

请注意,任务关系现在为空,正如我所期望的那样。但我也希望 taskType 为空。我做错了什么?

编辑:

我更改了代码,以便可以查看任务是否被标记为已删除。我现在有:

- (bool)removeAllEvents
{
    NSMutableSet *tasks = [self mutableSetValueForKey:@"tasks"];
    [tasks enumerateObjectsUsingBlock:^(Task *task, BOOL *stop)
     {
    if (![task isDeleted])
         [self.managedObjectContext deleteObject:task];
         NSLog(@"Deleted %@", [task isDeleted] ? @"Y" : @"N");
     }];
    [self.managedObjectContext processPendingChanges];
    return YES;
}

它确实显示“Y”,表示该任务已标记为删除。 fetchRequest 向我显示上下文中没有剩余任务。但如果我尝试保存,我会收到不一致的消息(“任务无效”)。

最佳答案

您的removeAllTask​​s方法不会删除任何对象。它仅删除 Occurrence 对象与 Task 对象的关系,但任务仍然存在。仅当删除对象时(使用 deleteObject:)才应用删除规则。

关于objective-c - 删除核心数据对象不会取消其所有关系吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16711547/

相关文章:

cocoa - NSSharingService - 删除 facebook 和 twitter 并添加打印

ios - 核心数据重复实体

ios - 检索记录中的核心数据混淆

iOS:NSPredicate for "@count == 0"用于一对一和一对多关系

ios - 多个名为 'count' 的方法发现警告

objective-c - 如何从屏幕内容创建 NSImage 实例

cocoa - 核心数据 - 从模型中删除实体

macos - NSTextField 具有像 Safari 地址栏一样的自动建议功能吗?

ios - PromiseKit:如何在 ObjC 中进行重试/轮询?

ios - 条形按钮项目 segue 未在下一个 View 的顶部添加导航栏