0

我正在尝试使用来自 JSON 提要的新数据重新加载我的应用程序。我会尝试;

- (void) Refresh {
[self performSelector:(@selector(refreshDisplay:)) withObject:(_tableView) afterDelay:0.5];
}

- (void)refreshDisplay:(UITableView *)tableView {

    [_tableView reloadData]; 
}

下载 JSON:

     NSString *jsonString = [NSString 
                                stringWithContentsOfURL:[NSURL URLWithString:xmlDataUrl] 
                                encoding:NSUTF8StringEncoding
                                error:nil];

        SBJSON *parser = [[SBJSON alloc] init];
        NSDictionary *results = [parser objectWithString:jsonString error:nil];

        parser = nil;

        [self setTableData:nil];
        [self setTableData:[results objectForKey:@"feed"]];

但它没有从 JSON 重新加载我的新数据,有谁知道我如何使用从在线 JSON 提要下载的新数据更新 tableview?我需要从 JSON 提要中删除旧数据并插入新数据。

4

2 回答 2

0

你确定你的数据真的在改变吗?您可以在您的方法中放置一些NSLogs-tableView:cellForRowAtIndexPath:以确保它被调用。看起来你的问题是你只是告诉它在半秒后刷新,到那时数据可能还没有加载。我建议你把[tableView reloadData]调用放在真正完成更新数据的方法中,这样你就知道在你调用它的时候它已经完成了。

还要注意这个方法:

- (void)refreshDisplay:(UITableView *)tableView {
    [_tableView reloadData]; 
}

不需要。首先,它忽略参数并调用reloadData您的 ivar _tableView。其次,如果您只想在半秒后重新加载数据,您可以调用:

[_tableView performSelector:@selector(reloadData) withObject:nil afterDelay:.5];

此外,基于这样一个事实,_tableView如果你有一个@synthesize tableView=_tableView你最好在self.tableView任何你可以使用的地方调用它,因为这避免了直接访问 ivar 并且被认为是“良好的形式”。

reloadData重申一下,在调用tableview 之前,请确保您的数据源实际上正在更新数据。

编辑

在您更新的帖子中,只需[self.tableView reloadData];在 JSON 解析代码的末尾添加即可。

于 2012-04-16T14:40:17.140 回答
0

该代码将让 tableview 检索其数据源对象必须提供的数据,但它不会执行任何从您的提要重新加载的操作。您需要确保 UITableViewDataSource 对象的方法从更新的 JSON 提要返回数据。您的 refreshDisplay 方法可以告诉数据源首先从 JSON 提要更新自身,然后再告诉表重新加载数据。

于 2012-04-16T14:45:32.903 回答