2017-01-19 11 views
0

正常なマッピングで孤立したオブジェクトを削除するには、 RKbjectManagerのグローバルルールのようなものを設定できますか?RestKit孤立したオブジェクトの削除ルール

私は現在、特定のパスパターンの孤児を削除するのに、RKPathMatcherを使用していますが、何かが不足しているようです。

答えて

0

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つのフェッチ要求ブロック。

+0

ありがとう@Eric Hedstrom、これは私がRestKitでそのオプションに近づけることができると思います。 –

+0

sortDescriptorがfetchRequestに含まれている理由はありますか?並べ替えは、レコードの差分を行う必要はありません、右か? – deepwinter

+0

@deepwinterはい、上の例のフェッチ要求は他のクエリコードからコピー/ペーストされていると思います。これらのフェッチ要求ブロックにソート記述子は必要ありません。 –

関連する問題