我在模态视图中有以下键值观察器方法:
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
if ([keyPath isEqualToString:@"uploadComplete"]) {
NSLog(@"UploadVC hears upload complete");
[self dismissViewControllerAnimated:YES completion:nil];
}
}
我用它来观看照片对象并知道它何时完成上传。当我运行它时,它的行为符合预期,并且控制台记录“UploadVC听到上传完成” - 但随后不执行以下行 - 模式不会被解雇。
没有错误或其他任何东西,视图只是坐在那里,模态永远不会被解雇。这是怎么回事?
答案 0 :(得分:4)
当您在后台线程上收到KVO通知时可能会发生这种情况,因此尝试更新UI可能会导致任何意外行为(UI未更改,在延迟一段时间后更改,应用程序崩溃等等)。确保在主线程上调用所有更新的UI代码:
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
if ([keyPath isEqualToString:@"uploadComplete"]) {
NSLog(@"UploadVC hears upload complete");
dispatch_async(dispatch_get_main_queue(), ^{
[self dismissViewControllerAnimated:YES completion:nil];
});
}
}