Objective c UITableView重新加载数据重复数据

Objective c UITableView重新加载数据重复数据,objective-c,iphone,ipad,Objective C,Iphone,Ipad,我在UIView上有3个UITableView,其中我从NSMutableArray加载了3组不同的数据。如果我调用[myTableView reloadData]这种数据类型的重载,它实际上会与已有的数据一起添加到表中。因此,3个重新加载数据的调用将导致三重列出的信息 如何防止这种情况发生,或者如何在重新加载前清除tableView?最常见的原因是不重用tableView单元格。如果为阵列中的每个逻辑行创建一个新单元(而不是出列和重用),tableview可能会继续显示所有单元。(**编辑:*

我在UIView上有3个UITableView,其中我从NSMutableArray加载了3组不同的数据。如果我调用[myTableView reloadData]这种数据类型的重载,它实际上会与已有的数据一起添加到表中。因此,3个重新加载数据的调用将导致三重列出的信息

如何防止这种情况发生,或者如何在重新加载前清除tableView?

最常见的原因是不重用tableView单元格。如果为阵列中的每个逻辑行创建一个新单元(而不是出列和重用),tableview可能会继续显示所有单元。(**编辑:**可能不会发生。)

如果不是这样,则将通过以下三种方法之一调用
reloadData

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView;
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section;
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;

TableView只显示数据。如果表是重复的,那么您很可能在代码中的某个地方复制了数据。您希望确保其中一个不会导致再次读取数组的原始源并将其附加到向表提供数据的可变数组中

使用
hasinommittedupdates
方法

例如:

if (self.tableview.hasUncommittedUpdates) { self.tableview.reloadData() } 

这将清除以前的数据并获取新数据。希望这有帮助

您是否在UITableView重新加载时调用的方法中的任何位置添加数据?哈哈哈-为什么是我,啊!复制发生在我的数组中,而不是我的表视图中-谢谢!将其作为答案发布,这样我就可以给你信用了创建新单元格不会复制可见数据。如果使用重用标识符创建单元格,则会导致旧行有效泄漏(更准确地说,是不必要的缓存)。但是,这些单元格不会出现在屏幕上,它们只是被tableview缓存。我似乎记得在某些情况下会有一些堆积,但我可能是错的。