2011-11-13 50 views
1

如何指定someController.tableView reloadData在notfication中被調用?如何將self.TableView方法傳遞給NotificationCenter的addObserver

重載包裝的實現是:

- (void) reloadTableAsContentsHasChanged 
{ 
    [self.tableView reloadData]; 
} 

,並調用Notofication中心的addObserver說法現在已經實現爲:

addObserver: self selector: @selector(reloadTableAsContentsHasChanged) 

它的工作還好吧,但包裝不應該是必要的。我已經嘗試過幾種符號,但是我無法正確理解它。應該可以在沒有包裝的情況下傳遞self.tableView的方法reloadData。

回答

0

您可以添加觀察者是這樣的:

[[NSNotificationCenter defaultCenter] addObserver: someController.tableView selector: @selector(reloadData) name: @"someName" object: self]; 

但你爲什麼不只是做這樣的:

[someController.tableView reloadData]; 
0
[[NSNotificationCenter defaultCenter] addObserver:tableView selector:@selector(reloadData) name:notificationName object:self]; 

,就可以(如果沒有的話蘋果可能因爲某種原因而無法直接通知UITableView)。不要忘了從觀察者刪除的tableView,當你鬆開

[[NSNotificationCenter defaultCenter] removeObserver:tableView]; 
1

這是NSNotificationCenter的基於塊的API的工作。

假設self將是對象張貼此通知...

id observer = [[NSNotificationCenter defaultCenter] 
    addObserverForName:@"SomeNotificationName" 
       object:self 
        queue:nil 
      usingBlock: ^(NSNotification *note){[self.tableView reloadData];} 

,記得註銷並釋放observer當你不需要聽此通知了。

+1

謝謝!奇蹟般有效。順便說一下,上面的代碼需要關閉']'。 – Clemens