0
是否可以设置像全局规则为 RKbjectManager
删除成功映射上的孤立对象。RestKit删除孤立的对象规则
我目前使用RKPathMatcher
删除特定路径模式的孤儿,但它看起来像我缺少的东西。
是否可以设置像全局规则为 RKbjectManager
删除成功映射上的孤立对象。RestKit删除孤立的对象规则
我目前使用RKPathMatcher
删除特定路径模式的孤儿,但它看起来像我缺少的东西。
阅读RKManagedObjectRequestOperation中的“获取请求块”,它们是预配置的NSFetchRequests,以便从本地存储返回给定类型的所有对象,以便RestKit可以找到不再位于服务器响应中的孤立对象。
他们的榜样块只检查机场候机楼:
RKObjectManager *manager = [RKObjectManager managerWithBaseURL:@"http://restkit.org"];
[manager addFetchRequestBlock:^NSFetchRequest *(NSURL *URL) {
RKPathMatcher *pathMatcher = [RKPathMatcher pathMatcherWithPattern:@"/airports/:airport_id/terminals.json"];
NSDictionary *argsDict = nil;
BOOL match = [pathMatcher matchesPath:[URL relativePath] tokenizeQueryStrings:NO parsedArguments:&argsDict];
NSString *airportID;
if (match) {
airportID = [argsDict objectForKey:@"airport_id"];
NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"Terminal"];
fetchRequest.predicate = [NSPredicate predicateWithFormat:@"airportID = %@", @([airportID integerValue])]; // NOTE: Coerced from string to number
fetchRequest.sortDescriptors = @[ [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES] ];
return fetchRequest;
}
return nil;
}];
,但你可以设置一个PathMatcher匹配任何模式,如果你的网址都比较一般:
RKPathMatcher *entityMatcher = [RKPathMatcher pathMatcherWithPattern:@"/tables/:entityName"];
BOOL entityMatch = (pathAndQueryString != nil) && [entityMatcher matchesPath:pathAndQueryString tokenizeQueryStrings:YES parsedArguments:&argsDict];
if (entityMatch) {
NSString *entityName = argsDict[@"entityName"];
NSFetchRequest *fetchRequest;
if (entityName) {
fetchRequest = [NSFetchRequest fetchRequestWithEntityName:entityName];
fetchRequest.includesSubentities = NO;
}
return fetchRequest;
}
然后你只需要一个获取请求块以匹配您的任何实体。
感谢@Eric Hedstrom,猜这是最接近我可以通过RestKit得到的选项。 –
那么为什么sortDescriptor被包含在fetchRequest中呢?排序不应该需要做记录的差异,对吗? – deepwinter
@deepwinter是的,我猜想顶级示例中的提取请求是从其他查询代码复制/粘贴的。这些提取请求块不需要排序描述符。 –