2011-01-19 59 views
0

我在使用NSNotification獲取tableView重裝時遇到了一些麻煩。TableView不能從NSNotification重裝

我的設置是我有一個過濾器視圖,允許用戶將過濾器應用到表視圖,一旦他們點擊更改過濾器我發送一個NSNotification在AppDelegate中拾取,然後重新加載核心數據應用過濾器作爲謂詞。

一旦從核心數據加載數據,我張貼另一個通知到tableView,告訴它重新加載它的數據。

使用NSLog的我可以看到,雖然[self.tableView reloadData]什麼都不做,通知正在發送和接收。

這裏是我的功能重新載入數據:

-(void)reloadTable:(NSNotification *)notification { 
    NSLog(@"reloading table"); 
    [self.rootTableView reloadData]; 
} 

調用從控制器內以同樣的方式重新加載,而這是目前針對正常工作,所以我很卡,爲什麼這ISN沒有工作。

+0

所以你重裝而tableview中不顯示在屏幕上? – Toastor 2011-01-19 16:30:41

+0

是的,這是問題嗎? – Alex 2011-01-19 16:31:28

+0

也許吧。從類參考我讀reloadData只會重新加載可見細胞的數據... – Toastor 2011-01-19 16:35:02

回答

3

通知是否到達主線程以外的線程?這將是如果通知是從後臺線程發送的。如果是這種情況,則需要將reloadData調用編組到主線程。像這樣的:

[tableView performSelectorOnMainThread: @"reloadData" withObject:nil waitUntilDone:NO]; 
0

1)

你有你的連接表rootTableView在界面生成器?

嘗試增加

NSLog(@"%@", self.rootTableView); 

這不應該是空:)

2)

如果你已經正確連接,你可以發佈你的表視圖的委託方法的代碼,看看有什麼在那裏?

1

這是爲了捕捉通知。你可以把它放在viewDidLoad

NSNotificationCenter* center = [NSNotificationCenter defaultCenter]; 
[center addObserverForName:kSFAccountsChanged object:nil 
        queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification *note) { 
          [tblView ReloadData]; 
         }]; 
} 

下面的代碼將會觸發一個通知:

NSNotificationCenter* center = [NSNotificationCenter defaultCenter]; 
[center postNotificationName:kSFAccountsChanged object:self];