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是的,我猜想頂級示例中的提取請求是從其他查詢代碼複製/粘貼的。這些提取請求塊不需要排序描述符。 –