我使用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
的值,其方式是项目和单元格中项目的日期彼此对应。
答案 0 :(得分:0)
您可以使用 键 - 值对 将您的解析数据存储到 NSDictionary 中。在这里,您可以使用title作为键,使用date作为值,这样两个数据都将对应于每个数据。
答案 1 :(得分:0)
有几点想法:
关于您的日期问题,听起来您将日期存储在名为currentDate
的单个实例变量中。鉴于您没有共享该代码,我认为您不是在cellForRowAtIndexPath
中这样做,而是在您的解析器中,或者类似的东西。不幸的是,这将为表中的每个单元格提供您解析的最后一行的日期。你应该
在cellForRowAtIndexPath
中调用您的日期格式(或者,更好地调用一种执行日期格式化的方法),特别是抓取[[stories objectAtIndex: storyIndex] objectForKey: @"isodate"]
,格式化并设置detailTextLabel.text
因此,或
而不是将格式化日期存储在单个currentDate
变量中,为格式化日期添加字典键,并将其存储在可变字典中,其中包含您从XML解析的所有内容(例如,读入{ {1}},格式化字符串并使用唯一键将其保存回同一个字典,可能是isodate
)。
formattedDate
是一种更常见的语法,如果您抓取与tableview的给定行关联的新闻项。
答案 2 :(得分:0)
问题在于行
NSUInteger storyIndex = [indexPath indexAtPosition: [indexPath length] - 1];
你应该使用indexPath.row,
cell.textLabel.text = [[stories objectAtIndex: indexPath.row] objectForKey: @"title"];