こんにちは、私はRestKitを0.10.2から0.20.3に更新しました。 Webサービスからオブジェクトが欠落しているときに更新したら、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は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;
}
iはuser_id
現在ログインを返す、[DBUser currentUser].user_id
を使用しています。そして、ここで、サーバがPOST
リクエストメソッドを期待しているので、私は、私が代わりにgetObjectsAtPath
のpostObject
を使用していたWebサービス
[[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