TableView无法从NSNotification重新加载

时间:2011-01-19 16:25:43

标签: iphone objective-c cocoa xcode

我在使用NSNotification重新加载tableView时遇到了一些麻烦。

我的设置是我有一个过滤器视图,允许用户将过滤器应用到表视图,一旦他们点击更改过滤器我发送一个在AppDelegate中拾取的NSNotification,然后重新加载核心将过滤器应用为谓词的数据。

从核心数据加载数据后,我将另一个Notification发布到tableView,告诉它重新加载它的数据。

使用NSLog我可以看到虽然[self.tableView reloadData]什么也没做,但是正在发送和接收通知。

这是我重新加载数据的功能:

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

当它在当前视图中时,从控制器内部以相同的方式调用重新加载工作正常,所以我很难理解为什么这不起作用。

3 个答案:

答案 0 :(得分:3)

通知是否到达主线程以外的线程?如果通知是从后台线程发送的话。如果是这种情况,您需要将reloadData调用编组到主线程。像这样:

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

答案 1 :(得分: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];

答案 2 :(得分:0)

1)

您是否已将表附加到界面构建器中的rootTableView?

尝试添加

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

这不应该为空:)

2)

如果您已正确附加,是否可以在表格视图委托方法中发布代码以查看其中发生了什么?