2012-04-24 5 views
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": "[email protected]" 
     }, 
     { 
      "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, что Theres массив авторов и если я изменяю класс автора атрибута в статье для NSArray, как же Restkit знает, что в этот NSArray должен быть Author-Objects ... ??

Я использую RKObjectMapping для сопоставления объектов от JSON до Objective-c и наоборот.

ответ

0

Вся строка respnse взять его в качестве nsmutable словаря затем присвоить значения автора в namutable массива ..

7

Вы хотите, чтобы убедиться, что вы установите тип уага соответственно:

@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, но я лично использую RestKit с моделями CoreData, а отношения в этих сценариях - это NSSet.

Кроме того, необходимо настроить отображение:

[articleMapping mapKeyPath:@"author" toRelationship:@"authors" withMapping:authorMapping]; 
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]; 
Смежные вопросы