我有一个UITableViewController类。我正在使用NSMutableArray来填充表格单元格。我从数据库和数据库中获取数据将它添加到数组。但细胞显示出旧的结果。我如何使用reladData方法&我应该在我的UITableViewController中调用此方法?
答案 0 :(得分:4)
我引用Apple的文档何时不使用它:
表格视图的委托或数据 source在需要时调用此方法 表视图完全重载 它的数据。它不应该被称为 插入或删除的方法 行,尤其是动画中的行 通过调用实现的块 beginUpdates和endUpdates。
因此,在更改模型时调用它,但不使用tableview方法更改表格,如:
deleteRowsAtIndexPaths:withRowAnimation:
deleteSections:withRowAnimation:
insertRowsAtIndexPaths:withRowAnimation:
insertSections:withRowAnimation:
答案 1 :(得分:3)
您可以使用
重新加载表格单元格//fetch data from database.. and update array
//reload table data asper new data
[self.tableView reloadData];
答案 2 :(得分:2)
当您想要强制重新加载表格或者当您知道尚未绘制表格时,您可以(并且应该)调用reloadData:
。
通常,您会在视图控制器的viewDidLoad:
方法或viewDidAppear:
(甚至viewWillAppear:
)中执行此操作。
在这些方法之外,如果您实质上更改了用于向表提供数据的数据数组的内容,则需要调用reloadData:
。例如,假设您有一个产品清单,其中包含每个产品的库存水平。在初始视图中,您可能只在表中显示数组中的所有内容。但是,假设您已应用过滤器以仅显示零库存的产品。包含产品的阵列将减少为仅包含那些产品,因此在减少阵列后,您可以在表格上调用reloadData:
以便更新视图。
顺便说一下,正如我最近发现的那样,当你调用reloadData:
时,表会异步重载(并且非常快)。但是,方法deleteRows...
,deleteSections...
,insertRows...
和insertSections...
(特别是beginUpdates:
和endUpdates:
之间的调用)是同步执行的,并且可以,对于大型表格,请大幅减慢您的应用程序(并冻结用户界面)。您的里程可能会有所不同,但这是我使用这些方法的经验。我实际上去了一个模型,我使用deleteSections...
,然后使用reloadData:
(因为我还是删除了所有部分)。
答案 3 :(得分:0)
每当调用reloadData方法时,都会刷新表视图。如果要在从数据库加载数据后刷新表,则可以在完成提取时调用重新加载数据。
// code to fetch data from database // when done, reload the table [myTableView reloadData];
答案 4 :(得分:0)
在数组类型的实例类前面添加{ didSet { tableview.reloadData() }
。
示例:
快速班级代码:
class Data {
var name = ""
var height = ""
}
ViewController
代码/类型为空数组的即时DataClass
:
let dataINDataClass = [Data] {
didSet {
tableview.reloadData()
}
希望这会有所帮助。