2012-07-02 104 views
1

我正在使用UITableView控件來顯示一些可以由用戶編輯的數據。爲了編輯細節,用戶點擊編輯按鈕,將新視圖推入堆棧。用戶編輯數據,點擊保存按鈕,數據被保存到plist中,視圖彈出堆棧。即使plist已更新,UITableView仍會顯示舊數據。這可以通過在viewWillAppear方法中添加對reloadData的調用來解決。但是,當視圖第一次加載數據顯示正確,通過添加重載語句這是否意味着雙重綁定?如果是這樣,這怎麼能避免?UITableView刷新查詢

我發現下面的代碼(here),它強制進行刷新,而不顯式調用reloadData:

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

誰能解釋如何/爲什麼這樣的作品?

回答

1

您鏈接的竅門是骯髒的黑客攻擊。它不僅重新加載數據,還強制重繪表格。它會告訴你的應用程序,該設備正在獲得新的方向,所以你的表格會與其他UI元素一起重新繪製。

在您的UITableView中刷新一行或一組特定行的標準方法是調用它的reloadRowsAtIndexPaths:withRowAnimation:方法:這樣做會調用您的數據源以僅獲取已更新的行的數據,防止完全重新加載。

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