2013-05-29 6 views
1

Я довольно новичок в инфраструктуре RestKit. Мне трудно разбираться в ответе JSON.Отображение объектов с помощью RestKit

{ 
    "success": "1", 
    "loginStatus": "Success", 
    "sessionToken": "NTE5YTg5NjE4ZDIxYzQ3YzMUybdtsUU8989GVmaW5lZHwxMzY5ODE0MTc4Mzgw", 
    "user": { 
     "ActivationMethod": false, 
     "ActivationToken": "iey4C5E3iMt7mXZL", 
     "Active": true, 
     "FirstName": "John", 
     "LastName": "Doe", 
} 
} 

Это ответ веб-службы входа в систему.

Я хочу иметь значение sessionToken, FirstName и LastName для сопоставления в одном классе. Для этого я создал класс User

@interface User : NSObject 

@property (nonatomic, strong) NSString* firstName; 
@property (nonatomic, strong) NSString* lastName; 
@property (nonatomic, strong) NSString* sessionToken; 

@end 

Для отображения Я попытался следующий код:

RKObjectMapping* mapping = [RKObjectMapping mappingForClass:[User class]]; 
    [mapping addAttributeMappingsFromDictionary:@{ 
    @"FirstName": @"firstName", 
    @"LastName": @"lastName", 
    @"sessionToken" : @"sessionToken", 
    }]; 

RKResponseDescriptor *responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:mapping pathPattern:@"/login" keyPath:nil statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)]; 

    [objectManager addResponseDescriptor:responseDescriptor]; 

С помощью этого я получаю значения Lastname и Firstname нулевой.

URL-адрес является HTTP: // [БАЗА URL]/войти в

Я прошел через это link на отображение объекта, но может решить эту проблему.

Все указатели в этом отношении будет очень полезным

С уважением,

tek3

** * ** * ** * ** * ** EDIT ** * ** * ** * ** * ****

Теперь я могу получить значения, используя код, приведенный ниже.

RKObjectMapping* userMapping = [RKObjectMapping mappingForClass:[User class] ]; 
    [userMapping addAttributeMappingsFromDictionary:@{ 
    @"FirstName": @"firstName", 
    @"LastName": @"lastName", 
    }]; 


    RKObjectMapping* loginMapping = [RKObjectMapping mappingForClass:[Login class] ]; 
    [loginMapping addAttributeMappingsFromDictionary:@{ 
    @"sessionToken": @"sessionToken", 
    }]; 

    [loginMapping addPropertyMapping:[RKRelationshipMapping relationshipMappingFromKeyPath:@"user" 
                       toKeyPath:@"user" 
                       withMapping:userMapping]]; 


    RKResponseDescriptor *responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:loginMapping pathPattern:@"/login" keyPath:nil statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)]; 

Но у меня все еще есть одна путаница. Мне пришлось создать еще один логин как

@interface Login : NSObject 

@property (nonatomic, strong) NSString* sessionToken; 
@property (nonatomic, strong) User* user; 

@end 

У пользователя есть объект класса User как свойство. Есть ли способ получить значения всех ключей в ответе JSON, просто создав один объект, а не несколько вложенных объектов?

ответ

5

Используя оригинальное отображение с помощью одного класса вы могли бы сделать:

RKObjectMapping* mapping = [RKObjectMapping mappingForClass:[User class]]; 
[mapping addAttributeMappingsFromDictionary:@{ 
@"user.FirstName": @"firstName", 
@"user.LastName": @"lastName", 
@"sessionToken" : @"sessionToken", 
}]; 
+0

Спасибо большое ... – tek3

+0

Спасибо! Помог мне много! –

Смежные вопросы