我正在使用UITableView控件来显示一些可由用户编辑的数据。要编辑详细信息,用户可以点击编辑按钮,将新视图推送到堆栈。用户编辑数据,点击保存按钮,数据保存到plist,视图从堆栈中弹出。即使plist已更新,UITableView仍会显示旧数据。这可以通过在viewWillAppear方法中添加对reloadData的调用来更正。但是,当首次加载视图时,数据显示正确,通过添加reload语句这是否意味着双重绑定?如果是这样,如何避免这种情况?
我发现以下代码(here)强制刷新而不显式调用reloadData:
- (void) viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
int orientation = [[UIDevice currentDevice] orientation];
if(orientation != UIDeviceOrientationUnknown)
[self willRotateToInterfaceOrientation:orientation duration:0];
}
任何人都可以解释这是如何工作的?
答案 0 :(得分:1)
你的链接的伎俩是一个肮脏的黑客。它不仅重新加载数据,还强制表重绘。它会告诉您的应用该设备正在获得新的方向,因此您的表格会与其他UI元素一起重新绘制。
在UITableView
中刷新单行或特定行集的标准方法是调用其reloadRowsAtIndexPaths:withRowAnimation:
方法:这样做会调用数据源来仅获取行的数据( s)已更新,阻止完全重新加载。
答案 1 :(得分:1)
这样做:
- (void) viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
//remove all objects from yourTableViewDataSourceArray
[yourTableViewDataSourceArray removeAllObjects];
//add new records from plist
yourTableViewDataSourceArray = plist request of data here
//reload table now
[yourtableView reloadData];
}