【问题标题】:Model structure for different categories不同类别的模型结构
【发布时间】:2013-04-20 13:18:33
【问题描述】:

我正在创建一个应用程序,其中有不同的类别,这些类别有不同的项目,我想在表格视图中显示。每个项目都有一个标题、描述、网址和一张图片。该类别有一个标题以及属于该类别的所有项目。

为这种结构创建模型的最佳方法是什么?

我正在考虑一个名为 Category 的 NSObject,其标题为 NSString,项目为 NSMutableArray。然后另一个 NSObject 使用 NSStrings 称为 Item。

我将使用所有数据解析 JSON。但是如何将 JSON 对象解析为正确的类别模型数组?

【问题讨论】:

    标签: objective-c model structure


    【解决方案1】:

    您的模型看起来足够好。但是为什么只有 NSStrings 用于项目。根据您的描述项目模型类应如下所示:

    @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];
        }
    }
    

    遍历字典(或访问字符串中的“category1”

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

    你可以使用 for in 循环。

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

    【讨论】:

    • 我还有一个问题。我对 JSON 进行了一些更改。现在我也有一个“标签”。像这样: NSString *jsonString= @"{ \"tab1\": [{ \"category1\": [ { \"iTitle\" : \"item1\", \"iDescription\":\"desc1\"} ,{ \"iTitle\" : \"item2\", \"iDescription\":\"desc2\"}]}}]";我可以像您在 jsonObj 中使用 NSString *tab 一样到达 tab1。但是我如何到达类别名称?
    • valueForKey: for tab 将返回第一个键为 'category1' 的字典。您可以使用 for each 循环来循环字典的键。 (我会更新答案)
    • 由于未捕获的异常“NSInvalidArgumentException”给我错误终止应用程序,原因:“-[__NSDictionaryM 长度]:无法识别的选择器发送到实例 0x8cad4f0”
    • 我认为该字符串不是有效的 json。试试这个.. @"{ \"tab1\": [{ \"category1\": [ { \"iTitle\" : \"item1\", \"iDescription\":\"desc1\"},{ \ "iTitle\" : \"item2\", \"iDescription\":\"desc2\"}]}]}"。编辑了答案。
    • 好酷。感谢您的所有帮助,非常感谢!现在我可以访问选项卡名称和类别名称(创建了一个带有名称的选项卡模型对象和带有类别的 NSMutableArray)。但是每个类别中的项目呢?我如何联系他们,然后将他们推送到他们的类别数组中?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多