2011-06-01 38 views
1

只是試圖在這裏適應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上的例子,但沒有得到它的工作,所以任何幫助將不勝感激。 感謝 摹

回答

3

你需要做的是在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

0

只是爲了任何跟進此事的人。最後,這一切都使用了他們剛剛用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