具有格式化文本的UITableView单元格从XML分析

时间:2013-01-03 07:00:20

标签: objective-c ios uitableview nsxmlparser

我使用NSXMLParser从URL解析XML文件,我解析的项目将添加到UITableView加载其数据的数组中。除其他事项外,我正在解析事件发生的标题以及这些事件发生的日期。解析这些项​​并将其添加到名为stories的数组中。我的目标是让事件的标题成为TableView中每个单元格的主要文本,日期是副标题。每个事件的标题不需要格式化(即,如果XML文件读取:“事件一”,那么应该显示的内容)我使用此方法成功完成此操作:

title是XML中项目的标题,stories是TableView从中加载数据的数组。)

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

    static NSString *MyIdentifier = @"MyIdentifier";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier];
    if (cell == nil) {
        cell = [[UITableViewCell alloc]
        initWithStyle:UITableViewCellStyleSubtitle
        reuseIdentifier:MyIdentifier];
    }

    // Set up the cell
    NSUInteger storyIndex = [indexPath indexAtPosition: [indexPath length] - 1];
    cell.textLabel.text = [[stories objectAtIndex: storyIndex] objectForKey: @"title"];

    return cell;
}

但是我确实需要格式化我解析的所有日期,我使用NSDateFormatter格式化,我对NSDateFormatter完成其工作后的日期格式感到满意。如果我不需要格式化我可以使用的日期:

cell.detailTextLabel.text = [[stories objectAtIndex: storyIndex] objectForKey: @"isodate"];

实现我的目标。一旦NSDateFormatter完成了它的工作,我有一个名为NSMutableString的变量(currentDate),其中包含我格式化日期的字符串值,使用控制台我可以看到这会产生所需的结果对于XML中的每个项目。当我使用时:

cell.textLabel.text = currentDate;

我最终得到了我的表中的每个单元格,其中包含XML文件中最终项目的日期(授予它看起来很好,格式正确)。我试过移动我的方法无济于事。如果你不介意指点我正确的方向,我需要知道如何在currentDate的字幕文本中包含我的变量UITableView的值,其方式是项目和单元格中项目的日期彼此对应。

3 个答案:

答案 0 :(得分:0)

您可以使用 键 - 值对 将您的解析数据存储到 NSDictionary 中。在这里,您可以使用title作为键,使用date作为值,这样两个数据都将对应于每个数据。

答案 1 :(得分:0)

有几点想法:

  1. 关于您的日期问题,听起来您将日期存储在名为currentDate的单个实例变量中。鉴于您没有共享该代码,我认为您不是在cellForRowAtIndexPath中这样做,而是在您的解析器中,或者类似的东西。不幸的是,这将为表中的每个单元格提供您解析的最后一行的日期。你应该

    • cellForRowAtIndexPath中调用您的日期格式(或者,更好地调用一种执行日期格式化的方法),特别是抓取[[stories objectAtIndex: storyIndex] objectForKey: @"isodate"],格式化并设置detailTextLabel.text因此,或

    • 而不是将格式化日期存储在单个currentDate变量中,为格式化日期添加字典键,并将其存储在可变字典中,其中包含您从XML解析的所有内容(例如,读入{ {1}},格式化字符串并使用唯一键将其保存回同一个字典,可能是isodate)。

  2. formattedDate是一种更常见的语法,如果您抓取与tableview的给定行关联的新闻项。

答案 2 :(得分:0)

问题在于行

NSUInteger storyIndex = [indexPath indexAtPosition: [indexPath length] - 1];

你应该使用indexPath.row,

cell.textLabel.text = [[stories objectAtIndex: indexPath.row] objectForKey: @"title"];