0
성공적인 매핑시 고아 개체를 삭제하려면 RKbjectManager
에 대한 전역 규칙과 같은 것을 설정할 수 있습니까?RestKit 고아 개체 삭제 규칙
현재 특정 경로 패턴에 대한 고아를 삭제하기 위해 RKPathMatcher
을 사용하고 있습니다.하지만 뭔가 누락 된 것처럼 보입니다.
성공적인 매핑시 고아 개체를 삭제하려면 RKbjectManager
에 대한 전역 규칙과 같은 것을 설정할 수 있습니까?RestKit 고아 개체 삭제 규칙
현재 특정 경로 패턴에 대한 고아를 삭제하기 위해 RKPathMatcher
을 사용하고 있습니다.하지만 뭔가 누락 된 것처럼 보입니다.
RKManagedObjectRequestOperation에있는 "Fetch Request Blocks"에있는 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;
}];
하지만 URL이 더 일반적인 경우에 당신은 어떤 패턴과 일치하는 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에 포함되는 이유는 무엇입니까? 정렬은 레코드의 diff 작업을 수행 할 필요는 없습니다. – deepwinter
@deepwinter 예, 상단의 예제에서 가져 오기 요청이 다른 쿼리 코드에서 복사/붙여 넣기되었다고 추측합니다. 이러한 페치 요청 블록에 정렬 설명자를 필요로하지 않습니다. –