嵌套的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的项目

+0

没有它仍然无法正常工作。实际上,数字课程甚至从未被调用过。我尝试了目录示例,并使用它的类而不是我的类,并以与示例中相同的方式调用它们,但仍然没有喜乐。它仍然只加载非数组数据。 – glogic 2011-06-02 10:25:57

只是为了任何跟进此事的人。最后,这一切都使用了他们刚刚用restkit发布的新OM2。非常好,易于使用的变化

+2

在我看来,我认为你应该接受bensnider的回答,而不是你自己的回答,因为他回答了你的问题。诚然,OM2是一个更好的方式,但他的回答是针对你问题中提出的情况。 – 2011-06-13 15:41:17

+1

我明白了你的观点,但我试过bensnider说过的方式,它仍然没有为我工作。他给出的答案可能是100%正确的,但如果它不适合我,我不知道我可以如何投票,因为对不起。 – glogic 2011-06-13 16:44:32

+0

嗨,你可以发布解决方案吗? – Darmen 2012-02-28 09:46:26