2

私は長い調査の後にこの投稿を行っていますが、私の問題に対する最善の解決策を見つけるのに本当に苦労しています.

私は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を尊重して正しくエンティティ マッピングされ、永続ストアへの保存を手動で管理します。

あなたの忍耐と助けを前もって感謝します。

4

1 に答える 1

0

一般的に言えば、リンク先の回答は引き続き有効です。RestKit は、マッピングが完了した後にコンテキストを保存しないための特別なサポートを追加していません (これは引き続き自動的に行われます)。ただし、RestKit が Core Data を作成および管理する方法は変更されています。Core Data の外部でオブジェクトを作成し、保存する準備ができたら、それらを管理対象オブジェクトにマップすることができます。RestKit によって作成された Core Data セットアップを改ざんしようとすると、(すぐではないにしても) 将来的に問題が発生する可能性が高く、2 つの異なる永続ストアを維持することは、Core Data の外部でデータを準備し、準備ができたらインポートするよりも複雑になる可能性があります。保存。

于 2013-10-02T09:39:31.040 に答える