Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone TableView未从NSNotification重新加载_Iphone_Objective C_Cocoa_Xcode - Fatal编程技术网

Iphone TableView未从NSNotification重新加载

Iphone TableView未从NSNotification重新加载,iphone,objective-c,cocoa,xcode,Iphone,Objective C,Cocoa,Xcode,我在使用NSNotification重新加载tableView时遇到一些问题 我的设置是,我有一个过滤器视图,允许用户将过滤器应用于表视图,一旦他们单击更改过滤器,我将发送一个NSNotification,该通知在AppDelegate中拾取,然后将应用过滤器的核心数据作为谓词重新加载 从核心数据加载数据后,我会向tableView发布另一个通知,通知它重新加载数据 使用NSLog,我可以看到通知正在发送和接收,尽管[self.tableView reloadData]没有做任何事情 以下是我重

我在使用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)