2013-04-20 63 views
0

我正在创建一个应用程序,其中有不同的类别,而且这些类别具有不同的项目,我希望在表格视图中显示不同的项目。每个项目都有一个标题,描述,网址和图像。该类别有一个标题和属于该类别的所有项目。不同类别的模型结构

哪种方法可以为此结构创建模型?

我在想一个叫做Category的NSObject,它的标题是NSString,项目是NSMutableArray。然后另一个名为Item with NSStrings的NSObject。

我将解析所有数据的JSON。但是,我怎样才能解析JSON对象到正确的类别模型数组?

回答

0

您的模型看起来不够好。但为什么只有NSStrings为Item。根据你的描述项目模型类应如下:

@interface Item: NSObject{ 
    NSString *title; 
    NSString *description; 
    NSURL *itemURL; 
    UIImage *image; 
} 

可以使用NSJSONSerialization用于分析JSON。对于如:

如果你有一个JSON字符串就像下面你可以分析它象下面这样:

NSString *jsonString= @"{ \"category1\": [ { \"iTitle\" : \"item1\", \"iDescription\":\"desc1\"},{ \"iTitle\" : \"item2\", \"iDescription\":\"desc2\"}]}"; 
NSData *data = [jsonString dataUsingEncoding:NSUTF8StringEncoding]; 
NSDictionary *jsonObj = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:&error]; 

如果你想解析,并把它在课堂上,你可以做到以下几点:

for (NSString *category in jsonObj) { 
    Category *categoryObj = [[Category alloc] init]; 
    categoryObj.title = category; 
    NSArray *itemArray = [jsonObj valueForKey:category]; 
    for (NSDictionary *item in itemArray) { 
     Item *itemObj = [[Item alloc] init]; 
     itemObj.title = [item valueForKey:@"title"]; 
     itemObj.description= [item valueForKey:@"description"]; 
     [categoryObj.items addObject:itemObj]; 
    } 
} 

要遍历一个字典(或字符串中访问“类别1”

@"{ \"tab1\": [{ \"category1\": [ { \"iTitle\" : \"item1\", \"iDescription\":\"desc1\"},{ \"iTitle\" : \"item2\", \"iDescription\":\"desc2\"}]}}" 

可以使用在循环。

NSDictionary *categoryDict = [[jsonObj valueForKey:"tab1"] objectAtIndex:0]; 
for (id key in categoryDict){ 
    NSLog(@"Key : %@",key); 
    NSLog(@"Value: %@",[categorDict valueForKey:key]; 
} 
+0

谢谢,真的很好的答案! – Jojo 2013-04-24 07:21:16

+0

没问题。如果您认为这是可以接受的解决方案。 – Rakesh 2013-04-24 09:06:38

+0

我还有一个问题。我在我的JSON中做了一些更改。现在我也有一个“标签”。像这样: NSString * jsonString = @“{”tab1 \“:[{\”category1 \“:[{\”iTitle \“:\”item1 \“,\”iDescription \“:\”desc1 \ “},{\”iTitle \“:\”item2 \“,\”iDescription \“:\”desc2 \“}]}}]”; 我可以达到tab1,就像你在jsonObj中使用NSString *标签一样。但是,我如何达到类别名称? – Jojo 2013-04-24 10:55:42