我在模式视图中具有以下键值观察器方法:

- (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听到上传已完成”-但随后未执行以下行-模态不会被忽略。

没有错误或其他任何东西,视图只是坐在那里,而模态永远不会消失。这里发生了什么?

最佳答案

当您在后台线程上收到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];
     });

  }
}

关于ios - iOS:键值观察不会关闭模态视图,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16240316/

10-10 23:46