嵌套的JSON与iPhone上的restkit iphone
问题描述:
只是试图在这里适应iphone应用程序的restkit,并且我击中了墙。我试图从嵌套的JSON文件中获取数据。嵌套的JSON与iPhone上的restkit iphone
[
{"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函数被调用后_number保持为空而名称和id变量填充正常。 有关于此的任何想法? 我试图在git上的例子,但没有得到它的工作,所以任何帮助将不胜感激。 感谢 摹
答
你需要做的是在Person.h声明一个NSArray *_numbers
成员变量,让它像财产和@property (nonatomic, retain) NSArray *_numbers
合成它在Person.m像@synthesize numbers = _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];
对于一个完整的例子看Catalog Example的int RestKit GitHub的项目
答
只是为了任何跟进此事的人。最后,这一切都使用了他们刚刚用restkit发布的新OM2。非常好,易于使用的变化
没有它仍然无法正常工作。实际上,数字课程甚至从未被调用过。我尝试了目录示例,并使用它的类而不是我的类,并以与示例中相同的方式调用它们,但仍然没有喜乐。它仍然只加载非数组数据。 – glogic 2011-06-02 10:25:57