1

我正在使用 UITableView 控件来显示一些用户可以编辑的数据。要编辑详细信息,用户点击编辑按钮,将新视图推送到堆栈上。用户编辑数据,点击保存按钮,数据被保存到 plist,视图从堆栈中弹出。即使 plist 已更新, UITableView 仍显示旧数据。这可以通过在 viewWillAppear 方法中添加对 reloadData 的调用来纠正。但是,当视图首次加载时,数据会正确显示,通过添加 reload 语句是否意味着双重绑定?如果是这样,如何避免这种情况?

我发现以下代码(此处)强制刷新,而无需显式调用 reloadData:

- (void) viewWillAppear:(BOOL)animated
 {
 [super viewWillAppear:animated];
 int orientation = [[UIDevice currentDevice] orientation];
 if(orientation != UIDeviceOrientationUnknown)
   [self willRotateToInterfaceOrientation:orientation duration:0];
 }

谁能解释这是如何/为什么起作用的?

4

2 回答 2

1

您链接的技巧是肮脏的黑客攻击。它不仅会重新加载数据,还会强制重新绘制表格。它告诉您的应用设备正在获得新的方向,因此您的表格将与其他 UI 元素一起重绘。

刷新单行或特定行集的标准方法UITableView是调用它的reloadRowsAtIndexPaths:withRowAnimation:方法:这样做会调用您的数据源以仅获取已更新行的数据,从而防止完全重新加载。

于 2012-07-02T13:33:50.293 回答
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];
 }
于 2012-07-02T13:37:08.873 回答