Iphone TableView未从NSNotification重新加载
我在使用NSNotification重新加载tableView时遇到一些问题 我的设置是,我有一个过滤器视图,允许用户将过滤器应用于表视图,一旦他们单击更改过滤器,我将发送一个NSNotification,该通知在AppDelegate中拾取,然后将应用过滤器的核心数据作为谓词重新加载 从核心数据加载数据后,我会向tableView发布另一个通知,通知它重新加载数据 使用NSLog,我可以看到通知正在发送和接收,尽管[self.tableView reloadData]没有做任何事情 以下是我重新加载数据的函数:Iphone TableView未从NSNotification重新加载,iphone,objective-c,cocoa,xcode,Iphone,Objective C,Cocoa,Xcode,我在使用NSNotification重新加载tableView时遇到一些问题 我的设置是,我有一个过滤器视图,允许用户将过滤器应用于表视图,一旦他们单击更改过滤器,我将发送一个NSNotification,该通知在AppDelegate中拾取,然后将应用过滤器的核心数据作为谓词重新加载 从核心数据加载数据后,我会向tableView发布另一个通知,通知它重新加载数据 使用NSLog,我可以看到通知正在发送和接收,尽管[self.tableView reloadData]没有做任何事情 以下是我重
-(void)reloadTable:(NSNotification *)notification {
NSLog(@"reloading table");
[self.rootTableView reloadData];
}
在控制器当前处于视图中时,以相同的方式从控制器内部调用reload可以很好地工作,因此我很难理解为什么这不起作用 1)
您是否已将表附加到interface builder中的rootTableView
尝试添加
NSLog(@"%@", self.rootTableView);
这不应为null:)
(二)
如果连接正确,是否可以在表视图委托方法中发布代码,以查看其中发生的情况?1)
您是否已将表附加到interface builder中的rootTableView
尝试添加
NSLog(@"%@", self.rootTableView);
这不应为null:)
(二)
如果已正确附加,是否可以在表视图委托方法中发布代码,以查看其中发生的情况?通知到达的线程是否不是主线程?如果通知是从后台线程发送的,则会出现这种情况。如果是这种情况,则需要对主线程进行重新加载数据调用。大概是这样的:
[tableView performSelectorOnMainThread: @"reloadData" withObject:nil waitUntilDone:NO];
通知到达的线程是否不是主线程?如果通知是从后台线程发送的,则会出现这种情况。如果是这种情况,则需要对主线程进行重新加载数据调用。大概是这样的:
[tableView performSelectorOnMainThread: @"reloadData" withObject:nil waitUntilDone:NO];
这是用来捕捉通知的。您可以将其放入
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];
这是用来捕捉通知的。您可以将其放入
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];
所以你在屏幕上看不到tableview的时候重新加载?可能吧。从类引用中,我读到重载数据只会重载可见单元格的数据…所以当tableview在屏幕上不可见时,您正在重载?可能吧。从类引用中我了解到,重载数据只会重载可见单元格的数据……我认为您的思路是正确的,因为当我应用过滤器时,相同的一系列事件也会起作用,但当我禁用并通过相同的过程时,它会失败。我在尝试实现您的解决方案时收到了这个错误:您能确认通知是否通过后台线程到达吗?你是从后台线程发送的吗?要进行检查,请在通知处理程序中设置断点。当它在调试器中中断时,请检查线程名称是否为com.apple.main-thread.ok,然后出现其他问题。您的UITableViewDataSource方法在[tableView reloadData]调用后是否被调用?啊,是的,谢谢,在查看delgate方法时,我突然发现加载到行中的数组已使用我的筛选方法进行了更改。但当我关闭过滤器时,我并没有将数据集重新加载回默认值,因此重新加载数据工作正常,只是加载了旧数据:这对我很有帮助。尽管有一些小的调整,但第一个参数应该是@selector(reloadData),我认为您的思路是正确的,因为当我应用过滤器时,相同的事件系列也会起作用,但是当我禁用并通过相同的过程时,它会失败。我在尝试实现您的解决方案时收到了这个错误:您能确认通知是否通过后台线程到达吗?你是从后台线程发送的吗?要进行检查,请在通知处理程序中设置断点。当它在调试器中中断时,请检查线程名称是否为com.apple.main-thread.ok,然后出现其他问题。您的UITableViewDataSource方法在[tableView reloadData]调用后是否被调用?啊,是的,谢谢,在查看delgate方法时,我突然发现加载到行中的数组已使用我的筛选方法进行了更改。但当我关闭过滤器时,我并没有将数据集重新加载回默认值,因此重新加载数据工作正常,只是加载了旧数据:这对我很有帮助。尽管有一些小的调整,第一个参数应该是@selector(reloadData)