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;
}
は、次に、あなただけの必要があるだろういずれかのエンティティに一致する1つのフェッチ要求ブロック。
ありがとう@Eric Hedstrom、これは私がRestKitでそのオプションに近づけることができると思います。 –
sortDescriptorがfetchRequestに含まれている理由はありますか?並べ替えは、レコードの差分を行う必要はありません、右か? – deepwinter
@deepwinterはい、上の例のフェッチ要求は他のクエリコードからコピー/ペーストされていると思います。これらのフェッチ要求ブロックにソート記述子は必要ありません。 –