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 的直接部分。
我正在使用 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 的直接部分。