私のセットアップ
以下はすべて正常に機能します。
RKManagedObjectMapping* chanMapping = [RKManagedObjectMapping mappingForClass:[Channel class] inManagedObjectStore:objectStore];
chanMapping.primaryKeyAttribute = @"chanId";
[chanMapping mapKeyPathsToAttributes:
@"id",@"chanId",
@"name", @"chanName",
nil];
[objectManager.mappingProvider setMapping:chanMapping forKeyPath:@"Channels.channel"];
電話できます
[[RKObjectManager sharedManager] loadObjectsAtResourcePath:@"/channels" delegate:self];
サーバーからチャンネルを取得し、CoreDataによってローカルに保存されます。完全。
問題
ただし、次にGETが実行されたときに、サーバーから削除されたチャネルをRestKitにコアデータストアから自動的に削除させたくありません。これは、以下を追加することでサポートされることを理解しています。
[objectManager.mappingProvider setObjectMapping:chanMapping forResourcePathPattern:@"/channels" withFetchRequestBlock:^ (NSString *resourcePath) {
return [Channel fetchRequest];
}];
ただし、これを使用すると、サーバーに新しいものがあるたびにすべてのチャネルが削除されます。
私が試したこと[更新]
以下の回答の手順を使用してデバッグしました。マッピングが機能していない/見つからないように見えます(つまり、マッピングをリソースパスに適切に関連付けていません)。
配列は見栄えがよくdeleteCachedObjectsMissingFromResult
、cachedObjects
前回から存在するはずのすべてのオブジェクトがありますが、results
配列は空であるため、[results containsObject:object]
常に存在NO
し、すべてのオブジェクトが削除されます。
リソースパスマッピングに関係する何かを変更する必要がありますか?