【问题标题】:iphone programming: making a MVC-styled app to parse JSON correctly?iphone 编程:制作一个 MVC 风格的应用程序来正确解析 JSON?
【发布时间】:2023-04-03 02:03:01
【问题描述】:

我正在尝试创建一个 iphone 应用程序,该应用程序获取 JSON 字符串,对其进行解析并在表格视图中显示项目列表。

我也在尝试为我的项目使用模型-视图-控制器 (MVC) 架构。

我的问题分为两部分:

1) 如何构建不同的文件以符合此标准 (MVC)?

2)(更笼统)我经历了很多 XML 解析示例,它们似乎实现了标准方法,例如“requestDidFinishLoad”、“setActiveProperty”等...成功发送请求并解析 JSON 字符串需要实现的方法?

【问题讨论】:

  • 哦。感谢您的提醒。对stackoverflow来说有点新。

标签: iphone model-view-controller json


【解决方案1】:

您的表格视图模型可能是NSArrayNSDictionary 实例。数组更便于演示。

Google 代码上的 json-framework 可以让您非常轻松地将 JSON 数组拉入 NSArray

例如,假设您的表视图控制器有一个保留的 NSArray 属性,称为 items

那么这里的JSON对象:

{
    "items" : [
        "item1",
        "item2", 
        ...
        "itemN"
    ]
} 

可以按如下方式倒入数组中:

SBJSON *jsonParser = [[SBJSON alloc] init];
NSDictionary *jsonDictionary = (NSDictionary *) [jsonParser objectWithString:jsonString error:nil];
self.items = (NSArray *) [jsonDictionary objectForKey:@"items"];
[jsonParser release];

您的表视图数据源委托只是从items 数组中提取对象,例如:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return [items count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    // instantiate or dequeue cell...

    // label cells with JSON item names
    cell.textLabel.text = [items objectAtIndex:indexPath.row];
}

【讨论】:

  • 刚试过这个.. 就像一个魅力。感谢您的回复!
【解决方案2】:

Apple 有很多关于 MVC 的文档。见this link

基本思想是将您的应用分为负责显示数据的部分(视图)、数据本身(模型)和两者之间的接口(控制器)。

在您的情况下,如果您只是解析和显示 JSON 并且不需要保存或编辑信息,您可以剪切模型并在控制器中完成所有工作。只需创建一个 UITableViewController 子类,将 JSON 解析为一个数组,并将该数组用作表格视图的数据源。如果永久存储数据对您来说比您想要查看 plist 或 CoreData 更重要。

【讨论】:

  • 感谢您的回复。也许,我应该给你更多关于我正在尝试设计的信息。基本上,我有一个名为“标志”的对象,它有 2 个属性(id、消息)和一个时间线(标志列表)。标志列表将通过 API 调用传递给我。所以理想情况下,我希望有一个单独的类文件来处理所有 JSON 解析,创建一个标志数组并将其传递给 tableView。那么,我应该将 JSONobject 实现为某种数据源吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-08-03
  • 2012-03-09
  • 1970-01-01
  • 1970-01-01
  • 2011-05-24
  • 1970-01-01
  • 2010-10-08
相关资源
最近更新 更多