gpt4 book ai didi

iphone - 在不重新加载 View 的情况下重新加载 UITableView 数据?

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:51:27 24 4
gpt4 key购买 nike

我有一个 UITableView,其中包含一堆项目,每次通过 refreshRows 方法加载表格时,我都会从 Web 应用程序获取这些项目的状态。执行此操作后,我会重新加载表格。

当我向表中添加项目时,我发现自己收到一条消息“更新无效:部分中的行数无效”。事实证明,重新加载表中的数据是必要的,因此我将旧的 viewDidAppear 方法更改为新的方法(如下所示)。我现在有两个 reloadData 调用,它们都刷新了我的 View 。

问题:有没有更简洁的方法来做到这一点?添加后我需要重新加载我的数据,但我不希望在从网络上获取所有状态之前不重新加载 View 。

- (void)viewDidAppear:(BOOL)animated // new
{
NSLog(@"viewDidAppear");
[super viewDidAppear:animated];

[self.tableView reloadData]; // <------------- Prettier way to do this?
[self refreshRows];
[self.tableView reloadData];

}

- (void)viewDidAppear:(BOOL)animated // old
{
NSLog(@"viewDidAppear");
[super viewDidAppear:animated];

[self refreshRows];
[self.tableView reloadData];

}

- (void)refreshRows {
// foreach row get status from webapp
}

编辑:

这是请求的代码:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
id <NSFetchedResultsSectionInfo> sectionInfo =
[[self.fetchedResultsController sections] objectAtIndex:section];
return [sectionInfo numberOfObjects];
}

最佳答案

如果只有您的数据源知道更改(并且应该观察到这一点),您可以尝试这样做:

  1. 注册您的 TableView 以观察数据源更新的通知中心。
  2. 从数据源向 NSNotificationCenter 发布更新已到来的通知。
  3. 使用 [self.tableView reloadData] 响应 TableView 的更新;

在数据源中:

- (void) dataSourceChanged
{

// All instances of TestClass will be notified
[[NSNotificationCenter defaultCenter]
postNotificationName:@"myUniqueDataSourceChanged"
object:self];

}

在 TableView Controller 中:

- (void)viewDidAppear:(BOOL)animated // new
{
NSLog(@"viewDidAppear");
[super viewDidAppear:animated];

[self.tableView reloadData]; // <------------- Prettier way to do this?
[self refreshRows];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(receiveNotification:)
name:@"myUniqueDataSourceChanged"
object:self.dataSource];
}

- (void) receiveNotification:(NSNotification *) notification
{
if ([[notification name] isEqualToString:@"myUniqueDataSourceChanged"])
[self dataSourceHasBeenChanged];
}

- (void) dataSourceHasBeenChanged
{

[self.tableView reloadData];
[self refreshRows];
}

这将在每次更新数据源时自动更新您的 TableView

关于iphone - 在不重新加载 View 的情况下重新加载 UITableView 数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7722711/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com