안녕하세요 저는 RestKit을 0.10.2에서 0.20.3으로 업데이트했습니다. 웹 서비스에서 개체가 누락되면 지금 업데이트 한 후 RestKit이 로컬 저장소에서 해당 개체를 삭제하지 않습니다. RestKit 0.20.x에서 지원된다는 것을 알고 있지만 구성 할 수 없습니다. 나는 여기서 주어진 예를 따랐다. http://restkit.org/api/latest/Classes/RKManagedObjectRequestOperation.html#overviewRestKit 로컬 저장소에서 고아 개체 삭제 안 함
나는 또한 Stackoverflow에 대한 비슷한 질문을했다. 그러나 아직 받아 들여지지 않은 대답은 없습니다.
여기 내 JSON 특정 사용자에 대한 모든 가족 구성원을 반환
{
"status": "Success",
"member_info": [
{
"family_id": "1",
"user_id": "1"
},
{
"family_id": "2",
"user_id": "1"
},
{
"family_id": "3",
"user_id": "1"
}
]
}
입니다. Json 위는 user_id = 1
입니다. 이제 요청이 user_id = 2
으로 전송되면 이전의 3 개 객체가 모두 Json에서 누락되어 로컬 저장소에서 삭제되어야합니다. 다음은 새로운 Json입니다. user_id = 2
{
"status": "Success",
"member_info": [
{
"family_id": "4",
"user_id": "2"
},
{
"family_id": "5",
"user_id": "2"
}
]
}
이것은 매핑을 만드는 방법입니다. 술어에서
[objectManager addResponseDescriptorsFromArray:@[
[RKResponseDescriptor responseDescriptorWithMapping:[self connectionsMapping]
method:RKRequestMethodPOST
pathPattern:@"familylist"
keyPath:@"member_info" statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)]];
[objectManager addFetchRequestBlock:^NSFetchRequest *(NSURL *URL) {
RKPathMatcher *pathMatcher = [RKPathMatcher pathMatcherWithPattern:@"familylist"];
NSDictionary *argsDict = nil;
BOOL match = [pathMatcher matchesPath:[URL relativePath] tokenizeQueryStrings:NO parsedArguments:&argsDict];
if (match) {
NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"DBConnections"];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"user_id == %@", [DBUser currentUser].user_id];
fetchRequest.predicate = predicate;
fetchRequest.sortDescriptors = @[ [NSSortDescriptor sortDescriptorWithKey:@"first_name" ascending:YES] ];
return fetchRequest;
}
return nil;
}];
- (RKEntityMapping *)connectionsMapping {
RKEntityMapping *connectionsMapping = [RKEntityMapping mappingForEntityForName:@"DBConnections" inManagedObjectStore:objectManager.managedObjectStore];
connectionsMapping.setDefaultValueForMissingAttributes = NO;
connectionsMapping.identificationAttributes = @[@"family_id"];
[connectionsMapping addAttributeMappingsFromDictionary:@{
@"family_id": @"family_id",
@"user_id": @"user_id",
}];
return connectionsMapping;
}
은 내가 user_id
현재 로그인을 반환하는 [DBUser currentUser].user_id
을 사용하고 있습니다. 그리고 여기에 서버가 POST
요청 방법을 기대하고 있기 때문에, 내가 대신 getObjectsAtPath
의 postObject
을 사용하고있는 웹 서비스
[[RKObjectManager sharedManager] postObject:nil path:@"familylist" parameters:params
success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) {
NSLog(@"Objects are %@", mappingResult.array);
}];
를 호출하고 있습니다. 내가 잘못하고 있니? 또는 고아 오브젝트를 삭제하기 위해 다른 작업을 수행해야합니다. 어떤 도움을 주셔서 감사합니다.
'[DBUser currentUser] .user_id' 값을 디버깅 했습니까? 술어는 꼭 필요한 것은 아니며, 술어없이 시도 했습니까? – Wain
감사합니다 @Wain, 나는 당신을 찾고 있었다 :), 나는 술어에 대한 값을 디버깅했는데 괜찮 았어, 내가 술어없이 시도하자. – Khawar
술어가 없어도 이전 데이터는 삭제되지 않습니다. – Khawar