6

ネストされた配列のマッピングについて質問を受けました。https://github.com/RestKit/RestKit/blob/master/Docs/Object%20Mapping.mdには、ネストされたオブジェクトをマッピングする例があります

しかし、ネストされたオブジェクトがオブジェクトの配列である場合、たとえば JSON が次のようになっている場合は、どうすればよいですか。

{ "articles": [
    { "title": "RestKit Object Mapping Intro",
      "body": "This article details how to use RestKit object mapping...",
      "author": [{
          "name": "Blake Watters",
          "email": "blake@restkit.org"
      },
      {
          "name": "abc",
          "email": "emailaddress"
      }]
      "publication_date": "7/4/2011"
    }]
}

作成者の配列を取得するために、クラスはどのように見えるべきですか? 例のコードは次のとおりです。

@interface Author : NSObject
    @property (nonatomic, retain) NSString* name;
    @property (nonatomic, retain) NSString* email;
@end



@interface Article : NSObject
    @property (nonatomic, retain) NSString* title;
    @property (nonatomic, retain) NSString* body;
    @property (nonatomic, retain) Author* author; // should be an array of Author-Objects
    @property (nonatomic, retain) NSDate*   publicationDate;
@end

作成者の配列があることをRestkitに伝えるにはどうすればよいですか。Articleの作成者属性のクラスをNSArrayに変更する場合、RestkitはこのNSArrayでAuthor-Objectsであることをどのように認識しますか...??

RKObjectMapping を使用して、オブジェクトを JSON から Objective-c に、またはその逆にマップしています。

4

4 に答える 4

8

それに応じて var タイプを設定する必要があります。

@interface Article : NSObject
    @property (nonatomic, retain) NSString* title;
    @property (nonatomic, retain) NSString* body;
    @property (nonatomic, retain) NSSet* authors;
    @property (nonatomic, retain) NSDate*   publicationDate;
@end

NSArray として宣言することで機能する場合がありますが、私は個人的に CoreData モデルで RestKit を使用しており、これらのシナリオでの関係は NSSet です。

さらに、マッピングを設定する必要があります。

[articleMapping mapKeyPath:@"author" toRelationship:@"authors" withMapping:authorMapping];
于 2012-04-24T16:49:21.350 に答える
3

分割すると助かります。

@interface Author : NSObject
    @property (nonatomic, retain) NSString* name;
    @property (nonatomic, retain) NSString* email;
@end



@interface Article : NSObject
    @property (nonatomic, retain) NSString* title;
    @property (nonatomic, retain) NSString* body;
    @property (nonatomic, retain) NSArray* author; 
    @property (nonatomic, retain) NSDate*   publicationDate;
@end


//create the article mapping
RKObjectMapping *articleMapping = [RKObjectMapping mappingForClass:[Article class]];
//add rest of mappings here
[articleMapping addAttributeMappingsFromDictionary:@{
                                                  @"title":@"title"
} 

//create the author mapping
RKObjectMapping *authorMapping = [RKObjectMapping mappingForClass:[Author class]];
//add rest of mappings here
[authorMapping addAttributeMappingsFromDictionary:@{
                                                  @"name":@"name"
} 

//link mapping with a relationship
RKRelationshipMapping *rel = [RKRelationshipMapping relationshipMappingFromKeyPath:@"authors" toKeyPath:@"author" withMapping:authorMapping];

//add relationship mapping to article
[articleMapping addPropertyMapping:rel];
于 2014-06-30T19:00:37.527 に答える
0

全体の応答文字列はそれを nsmutable ディクショナリとして取得し、作成者の値を名前付き配列に割り当てます。

于 2012-04-24T10:47:06.017 に答える