我在使用NSNotification重新加载tableView时遇到了一些麻烦。
我的设置是我有一个过滤器视图,允许用户将过滤器应用到表视图,一旦他们点击更改过滤器我发送一个在AppDelegate中拾取的NSNotification,然后重新加载核心将过滤器应用为谓词的数据。
从核心数据加载数据后,我将另一个Notification发布到tableView,告诉它重新加载它的数据。
使用NSLog我可以看到虽然[self.tableView reloadData]什么也没做,但是正在发送和接收通知。
这是我重新加载数据的功能:
-(void)reloadTable:(NSNotification *)notification {
NSLog(@"reloading table");
[self.rootTableView reloadData];
}
当它在当前视图中时,从控制器内部以相同的方式调用重新加载工作正常,所以我很难理解为什么这不起作用。
答案 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)
如果您已正确附加,是否可以在表格视图委托方法中发布代码以查看其中发生了什么?