3

我在尝试重新UITableView加载从 XML 源加载的单元格数据时遇到问题。

这是场景。应用程序包含选项卡,其中一个有一个表格视图,它从 XML 文件中获取数据并且工作正常,但问题是当我想更改提要类别并从另一个选项卡更改 XML 时,我可以刷新当前的表格视图. 为了在我使用的标签之间切换

self.tabBarController.selectedIndex = 1;

并将类别提要传递给我要加载的另一个选项卡

xmlParser = [[XMLParser alloc] loadXMLByURL:categories];

它仍然加载相同的旧提要,而不是已通过的新提要。我检查过NSLog,提要值正确传递,但切换后不会加载。

我还尝试[self.tableView reloadData];从当前选项卡和类别选项卡中进行,但它也不起作用。

4

3 回答 3

4

您可以使用 NSNotifications 从您的其他选项卡发送通知,并在您的 tableview 中有一个响应该通知的 oberver。

例子

(选项卡调用 tableview 的重新加载)每当您想重新加载数据时放置此代码,因此当按下按钮或下载完成等时。

NSNotification * notification = [NSNotification notificationWithName:@"updateTable" object:nil];
[[NSNotificationCenter defaultCenter] postNotification:notification];

在 UITableViewController / 带有 UITableView 的类中,执行以下操作。

在您的 viewDidLoad 添加:

[[NSNotificationCenter defaultCenter] addObserver:self  selector:@selector(updateTableView) name:@"backtolist" object:nil];

然后添加函数updateTableView

- (void) updateTableView: (NSNotification*) note
{
    //Do whatever needs to be done to load new data before reloading the tableview
    [_tableView reloadData];
}

希望这可以帮助

于 2012-12-19T14:03:44.553 回答
1

Ophychius 使用通知的建议是正确的。我假设您在 XML 完成加载后更新了表格视图的所有数据源。这也假设您使用的是动态单元格。在加载 XML 的类中,在新 XML 完成加载时发布通知。

    [[NSNotificationCenter defaultCenter] postNotificationName:@"XMLLoaded" object:nil];

在表视图类中,注册为您从 XML 类发布的通知的观察者。

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reloadTable:) name:@"XMLLoaded" object:nil];

如您所见,当收到此通知时,它会调用选择器。要么调用构建表的方法,要么创建另一个简单的方法来调用 reloadData。

-(void)reloadTable:(NSNotification *)notif
{
    NSLog(@"In ReloadTable method. Recieved notification: %@", notif);

    [self.tableView reloadData];
}

最后(正如莱昂纳多在下面指出的),在您的 viewDidUnload(或 ios6 的 dealloc)方法中,删除该类作为该通知的观察者。

- (void)viewDidUnload
{
    [super viewDidUnload];
    [[NSNotificationCenter defaultCenter] removeObserver:self];
}

- (void)dealloc
{
    [[NSNotificationCenter defaultCenter] removeObserver:self];
}
于 2012-12-19T15:33:35.610 回答
0

我只是猜测,没有看到其余的代码。

我想你的表视图有一个 NSArray 数据源,你确定你的数组数据源也更新了吗?您的 xml 解析器或控制器是否将这些数据传输到 NSArray ?

因为如果您调用 reloadData 它只会重新获取相同的数组。如果它没有更新,你会得到旧数据。

于 2012-12-19T15:31:03.903 回答