RestKit获取请求块(删除孤立对象)

时间:2015-01-22 14:45:40

标签: ios core-data restkit restkit-0.20

我正在使用restkit。我的coredata实体的排列方式如screehot Core Data Tables

所示

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

[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对象。例如,如果某个列表的任务通过服务器被删除,那么刷新它也会从本地存储中消失,从而消失在表视图中。

但是,如果删除了服务器副本,那么“任务日志”,“任务注释”和“任务注释”等任务的子项不会从本地存储中删除。

例如,如果从服务器删除任务的任务说明,那么在刷新数据时,“现在”的孤立任务注释仍会显示在表中。

我正在使用此GET描述符,它以适当的JSON格式返回所有相关数据

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

我做错了什么?我在任何地方使用fetch结果控制器自动更新视图。

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

1 个答案:

答案 0 :(得分:3)

你没有做错任何事,但你的期望是错误的。

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

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