1

今のところ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"];

次に、人クラスと数字クラスを次のように

#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

しかし、didloadobjects 関数が呼び出された後、name 変数と id 変数が正常にいっぱいになるたびに、_number が空のままになります。これに関するアイデアはありますか?私はgitで例を試しましたが、うまくいかなかったので、助けていただければ幸いです。ありがとう

4

2 に答える 2

3

あなたがする必要があるのはNSArray *_numbers、 Person.h でメンバー変数を宣言し、それをプロパティ like に@property (nonatomic, retain) NSArray *_numbersして、それを Person.m like で合成すること@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 プロジェクトのCatalog Exampleを参照してください。

于 2011-06-01T14:54:11.090 に答える
0

これをフォローアップする人のためだけに。最後に、restkit でリリースされたばかりの新しい OM2 を使用して、これをすべて機能させました。とても素敵で使いやすい変更

于 2011-06-09T12:45:58.120 に答える