0

我正在将 UITableView 实现为包含 5 个表格单元的第一级视图控制器。击中任何这些单元格将呈现第二级视图。在这个级别视图的左上方,有一个“返回”按钮可以返回到第一级视图。在第二级视图中,向左或向右滑动将连续显示相邻视图,这些视图链接到第一级视图中的相邻表格单元格。

运行后,从一级视图到二级视图就可以了。但是当点击“返回”按钮时,从二级视图返回到一级视图,以下是我遇到的问题。

An instance 0x7a8f130 of class UIScrollView was deallocated while key value observers were still registered with it. Observation info was leaked, and may even become mistakenly attached to some other object.
Set a breakpoint on NSKVODeallocateBreak to stop here in the debugger. 
Here's the current observation info: (
Context: 0x0, Property: 0x9149570>
)

我发现

- (void)viewDidUnload
{
    [super viewDidUnload];
    [self.scrollView removeObserver:self forKeyPath:@"frame"];
    [self.scrollView removeFromSuperview];
    _scrollView = nil;
}

GDIInfinitePageScrollViewController.m我用来实现无限滚动视图控制器的那个。当我对此发表评论时,问题仍然存在。

当我设置断点时NSKVODeallocateBreak,这就是我得到的

0x1170ae0:  pushl  %ebp

但我不知道这意味着什么。

有谁知道如何解决这个问题?

4

2 回答 2

1

您收到该消息的原因是 UIScrollView 实例在其观察者被删除之前被释放。

当视图已经被释放时调用 -(void) viewDidUnload 方法,因此调用删除观察者为时已晚。此外,这与 -(void) viewWillUnload 一起在 iOS 6 中已被弃用。

作为替代方案,请尝试在按下后退按钮时移除观察者。

于 2013-07-08T11:05:26.327 回答
1

替换- (void)viewDidUnload- (void)viewWillDisappear为我工作

于 2014-11-27T00:19:08.110 回答