RestKit Fetch Request Block(删除孤立对象)

RestKit Fetch Request Block (Deletion of orphaned objects)

我正在使用 restkit。我的核心数据实体的排列如屏幕截图所示

我添加了以下提取请求块来删除孤立对象

[objectManager addFetchRequestBlock:^NSFetchRequest *(NSURL *URL) {
 RKPathMatcher *pathMatcher = [RKPathMatcher pathMatcherWithPattern:@"/api/lists/:phone_no"];

    NSDictionary *argsDict = nil;
    BOOL match = [pathMatcher matchesPath:[URL relativePath] tokenizeQueryStrings:NO parsedArguments:&argsDict];
    NSString *phone_no;
    if (match)
    {
        phone_no = [argsDict objectForKey:@"phone_no"];
        NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"List"];
        //we don't need request predicate here. We delete all local items which are not present in retruned response.

        return fetchRequest;
    }
    return nil;

 }];

它适用于孤立的 List 和 Task 对象。例如,如果某个列表的任务在服务器上被删除,那么在刷新时它也会从本地存储中消失,因此 table-view.

但是像 'Task Log'、'Task Comment' 和 'Task Note' 这样的任务的子项不会从本地存储中删除,如果它们的服务器副本被删除的话。

例如,如果任务的任务注释从服务器中删除,那么在刷新数据时 'now' 孤立的任务注释仍然显示在 table。

我正在使用此 GET 描述符,其中 returns 所有相关数据都采用适当的 JSON 格式

//Response Descriptor GET for List
RKResponseDescriptor *listResponseDescriptorGET = [RKResponseDescriptor responseDescriptorWithMapping:listEntityMapping
                                                                                               method:RKRequestMethodGET
                                                                                          pathPattern:@"/api/lists/:phone_no"
                                                                                              keyPath:nil
                                                                                          statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)];

我做错了什么?我到处都使用获取结果控制器,它会自动更新视图。

如果需要,我可以提供更多信息。

你并没有做错什么,但你的期望是错误的。

如果在删除列表时删除任务是因为 Core Data 删除规则,而不是因为 RestKit。 RestKit 只会在存储中找到 List 个要删除的对象。

您可以在 Core Data 中配置删除规则,以将删除从任务级联到它拥有的关系端点,但同样,这不是 RestKit 的直接部分。