вложенный JSON с Restkit на Iphone - PullRequest
1 голос
/ 01 июня 2011

сейчас просто пытаюсь привыкнуть к реститку для приложений для iphone, и я врезался в стену.Я пытаюсь получить данные из вложенного json-файла.

[
{"person": {
    "name": "joe",
    "id": "1234",
    "numbers":
        [
            {"value": "555-12125"},
            {"value": "222-12125"}
        ]
    }
}]

Я настроил rkobjectmanager следующим образом:

RKObjectManager* manager = [RKObjectManager objectManagerWithBaseURL:@"http://localhost:3000"];  
[manager loadObjectsAtResourcePath:@"/J.json?user_id=36995582&planner=insta-grammar" objectClass:[Person class] delegate:self] ;

[manager registerClass:[Person class] forElementNamed:@"person"];
[manager registerClass:[Numbers class] forElementNamed:@"numbers"];

затем класс person и класс чисел следующим образом

#import "Person.h"


@implementation Person

@synthesize _name,_id,_number;

+ (NSDictionary*)elementToPropertyMappings {  
    return [NSDictionary dictionaryWithKeysAndObjects:  
            @"name",@"name",
            @"id",@"id",nil];  
}  




+ (NSDictionary*)elementToRelationshipMappings {
    return [NSDictionary dictionaryWithKeysAndObjects:
            @"numbers", @"numbers",
            nil];
}

@end


#import "Numbers.h"


@implementation Numbers

@synthesize _number;

+ (NSDictionary*)elementToPropertyMappings {  
    return [NSDictionary dictionaryWithKeysAndObjects:  
            @"value",@"value",nil];  
}  

+ (NSString*)primaryKeyProperty {
    return @"value";
}
+ (NSDictionary*)relationshipToPrimaryKeyPropertyMappings {
    return [NSDictionary dictionaryWithObject:@"value" forKey:@"value"];
}



@end

но каждый раз, когда _number остается пустым после вызова функции didloadobjects, в то время как переменные name и id заполняются нормально.есть идеи по этому поводу?Я попробовал пример на git, но не смог заставить его работать, поэтому любая помощь будет оценена.спасибо г

Ответы [ 2 ]

3 голосов
/ 01 июня 2011

Что вам нужно сделать, это объявить переменную-член NSArray *_numbers в Person.h, сделать ее свойством типа @property (nonatomic, retain) NSArray *_numbers и синтезировать его в Person.m, например @synthesize numbers = _numbers. Тогда вы можете избавиться от того, что есть _number, так как вы не будете хранить один числовой объект, вы будете хранить массив числовых объектов.

Вместо этого ваш класс Numbers должен быть просто Number, и вы должны синтезировать свою числовую переменную, например @synthesize number = _number;. Так что ваш Number.m должен выглядеть как

@implementation Number
@synthesize number = _number;

+ (NSDictionary *)elementToPropertyMappings {  
    return [NSDictionary dictionaryWithKeysAndObjects:  
            @"value", @"number", nil];  
}

Поскольку ваше свойство является числом, значение словаря сопоставления равно @"number", а исходный ключ JSON должен быть @"value".

Затем вы можете загрузить объекты следующим образом (обратите внимание, что мы используем наш класс Number для элемента @"numbers"):

RKObjectManager* manager = [RKObjectManager objectManagerWithBaseURL:@"http://localhost:3000"];
[manager registerClass:[Person class] forElementNamed:@"person"];
[manager registerClass:[Number class] forElementNamed:@"numbers"];

[manager loadObjectsAtResourcePath:@"/J.json?user_id=36995582&planner=insta-grammar" delegate:self];

Для полного примера см. Пример каталога в проекте RestKit github

0 голосов
/ 09 июня 2011

Только для тех, кто следит за этим. Наконец-то все заработало, используя новый OM2, который они только что выпустили с restkit. очень приятное и простое в использовании изменение

...