我正在查看 TestFlight 中的崩溃报告,最常见的崩溃是:
Cannot remove an observer "ListViewController 0x1d590500" for the key path "batchImageDownloadingInProgress" from "ListArchiver 0x1d5b83b0" because it is not registered as an observer.
在 ListViewController
中:
- (void)viewWillAppear:(BOOL)animated
{
...
[[WanderlistArchiver sharedArchiver] addObserver:self forKeyPath:@"batchImageDownloadingInProgress" options:NSKeyValueObservingOptionNew context:nil];
}
// **** the error happens in here ****
- (void)viewWillDisappear:(BOOL)animated
{
...
[[WanderlistArchiver sharedArchiver] removeObserver:self forKeyPath:@"batchImageDownloadingInProgress"];
}
如果我在 viewWillAppear
中设置观察者(并且不要在代码中的其他任何地方触及它),为什么当 viewWillDisappear
运行时它仍然没有注册?这种情况在过去 90 天内只发生过 5 次,但我仍然想了解为什么会发生这种情况。
最佳答案
最有可能的问题是 viewWillDisappear:
在每次调用 viewWillAppear:
时被多次调用。由于这似乎很少发生,因此一定有一些奇怪的事件序列导致了这种情况的发生。
如果无法重现问题,一种可能的解决方法是添加 BOOL
ivar。添加观察者时,在 viewWillAppear:
中将其设置为 YES。在 viewDidAppear:
中,检查它是否已设置。如果设置,则将其设置为 NO 并删除观察者。如果未设置,则您知道不要删除观察者。
关于iphone - 为什么我的观察员未注册?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14364736/