我使用以下JSON日期
的日期数据[
{
"categoryId": 202,
"name": "Sport"
},
{
"categoryId": 320,
"name": "Fritid"
},
{
"categoryId": 350,
"name": "Kultur"
},
{
"categoryId": 4920,
"name": "Diverse"
},
{
"categoryId": 4774,
"name": "Samfunn"
} ]
使用Follwing代码
SBJsonParser *parser = [[SBJsonParser alloc] init];
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.krsconnect.no/community/api.html?method=categories&appid=620&mainonly=true"]];
NSData *response = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
NSString *json_string = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
NSDictionary *object = [parser objectWithString:json_string error:nil];
//appDelegate.books = [[NSMutableArray alloc] initWithCapacity:0];
appDelegate.books = [[NSMutableArray alloc] init];
NSArray *results = [parser objectWithString:json_string error:nil];
for (int i=0; i<[results count]; i++) {
Book *aBook = [[Book alloc] initWithDictionary:[results objectAtIndex:i]];
[appDelegate.books addObject:aBook];
[aBook release];
}
书类
@interface Book : NSObject {
NSString *catId;
NSString *name;
}
@property(nonatomic,retain)NSString*catId;
@property(nonatomic,retain) NSString *name;
@end
#import "Book.h"
@implementation Book
@synthesize catId,name;
-(id)init{
self=[super init];
}
- (id)initWithDictionary:(NSDictionary*) dict {
self.catId = [dict valueForKey:@"categoryId"]; self.name =
[dict valueForKey:@"name"];
return self;
}
答案 0 :(得分:6)
这是因为CatId
的类型为NSString
将其更改为NSNumber
并尝试
希望这有帮助。
答案 1 :(得分:2)
在解析categoryId的响应时,您似乎正在获取NSNumber。所以尝试将NSNumber对象替换为NSString。
答案 2 :(得分:0)
您获取的词典可能会将数值存储为NSNumber
个对象。因此,您的catId
也应该是NSNumber
,或者-initWithDictionary:
应该使用例如{1}}将类别ID提取为基本类型。然后应将-intValue
和catId声明为int
。
顺便说一下,您应该使用-objectForKey:
从NSDictionary
获取对象。由于-valueForKey:
进行了一些额外处理,然后调用-objectForKey:
,因此性能稍微提高一些。
同样json_string
泄漏,因此appDelegate.books
可能会发生泄漏。