私は長い調査の後にこの投稿を行っていますが、私の問題に対する最善の解決策を見つけるのに本当に苦労しています.
私はresKitとCoreDataの両方にまったく慣れていません...とにかく、Webサービスから受け取ったJSONをCoreDataにマッピングして保存しています。
ここにいくつかのコード:
//ResKit and Core Data initialization here
...
//Initialization RKObjectManager
RKObjectManager *objectManager = [RKObjectManager managerWithBaseURL:[NSURL URLWithString:@"http://http://www.myWebService.com"]];
objectManager.managedObjectStore = managedObjectStore;
[RKObjectManager setSharedManager:objectManager];
//Categories Mapping and descriptor
RKEntityMapping *categoriesMapping = [RKEntityMapping mappingForEntityForName:@"XNCategory" inManagedObjectStore:managedObjectStore];
[categoriesMapping addAttributeMappingsFromDictionary:@{
@"id": @"idCategory",
@"desc": @"desc",
@"idFam":@"idFam"}];
categoriesMapping.identificationAttributes = @[ @"idCategory" ];
RKResponseDescriptor *categoriesDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:categoriesMapping
method:RKRequestMethodGET pathPattern:@"getData.asp" keyPath:@"categories"
statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)];
//Families Mapping and descriptor
RKEntityMapping *familiesMapping = [RKEntityMapping mappingForEntityForName:@"XNFamily" inManagedObjectStore:managedObjectStore];
[familiesMapping addAttributeMappingsFromDictionary:@{
@"id": @"idFam",
@"desc": @"desc"}];
familiesMapping.identificationAttributes = @[ @"idFam" ];
RKResponseDescriptor *familiesDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:familiesMapping
method:RKRequestMethodGET pathPattern:@"getData.asp" keyPath:@"families"
statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)];
//Relation between the 2 mapping
NSEntityDescription *categoryEntity = [NSEntityDescription entityForName:@"XNCategory"
inManagedObjectContext:[managedObjectStore mainQueueManagedObjectContext]];
NSRelationshipDescription *userRelationshipFrom = [categoryEntity relationshipsByName][@"family"];
RKConnectionDescription *connectionUserMessageFrom = [[RKConnectionDescription alloc]
initWithRelationship:userRelationshipFrom attributes:@{ @"idFam": @"idFam" }];
[categoriesMapping addConnection:connectionUserMessageFrom];
//Finally add the descriptor to the object manager
[objectManager addResponseDescriptor:categoriesDescriptor];
[objectManager addResponseDescriptor:familiesDescriptor];
別のView Controllerで、すべてのデータをダウンロードする必要がある場合は、次のようにします:
[[RKObjectManager sharedManager] getObjectsAtPath:@"getData.asp" parameters:@{kAuthKeyName : kAuthKeyValue} success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) {
//Success block
}failure:^(RKObjectRequestOperation *operation, NSError *error) {
//Failure Block
}];
このコードは正しくダウンロードされ、エンティティ間の関係を維持する CoreData の永続ストアに自動的に保存されます。
今私の質問:この自動保存を回避する方法はありますか? webService から取得したデータを処理し、決定した場合にのみ保存する必要があるためです。
この投稿は非常に有用であることがわかりました。または、少なくとも、調査を開始するための良い情報を提供してくれました: Best practice for temporary objects in RestKit with Core Dataですが、これは 2012 年の投稿であり、何かが変更されたかどうかはわかりません。今、より良い解決策があります。
言い換えれば、私が必要としているのは、ResKit とのマッピングを可能にするメソッドです。そのため、受信したすべてのデータは、私が作成したすべてのNSRelationshipDescriptionを尊重して正しくエンティティ マッピングされ、永続ストアへの保存を手動で管理します。
あなたの忍耐と助けを前もって感謝します。