UITableView刷新查询

时间:2012-07-02 13:14:31

标签: objective-c ios uitableview

我正在使用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];
 }

任何人都可以解释这是如何工作的?

2 个答案:

答案 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];
 }