来自UINavigationBar的弹出视图控制器时出现UIScrollView错误

时间:2014-02-10 14:35:00

标签: ios objective-c uiscrollview uinavigationbar uiscrollviewdelegate

我有一个带有分页UIScrollView的视图控制器。具体来说,这个滚动视图有3页,我希望它从第二页开始。所以当视图加载时,我调整内容偏移量从第二页开始:

CGFloat offsetX = _pageWidth * SECOND_PAGE;
[_scrollView setContentOffset:CGPointMake(offsetX, 0) animated:YES];

但是当我击中" Back" UINavigationBar中的按钮,并且UIScrollView不在第二页中,发生错误。

堆栈跟踪显示导航控制器在方法removeFromSuperview的滚动视图中删除视图,deallocs和调用,然后UIScrollView调用adjustContentoffsetIfNeccesary--->notifyDidScroll。所以我认为发生的事情是UIScrollView想要通知UIScrollView委托已经发生了滚动,但委托已经发布了,EXC_BAD_ACCESS发生了。

那么,任何人都知道实现我想要的行为的正确方法是什么?

这是我谈到的堆栈跟踪:

#1  0x0075595b in -[UIScrollView(UIScrollViewInternal) _notifyDidScroll] ()
#2  0x0073fc43 in -[UIScrollView setContentOffset:] ()
#3  0x0075ccae in -[UIScrollView(UIScrollViewInternal) _adjustContentOffsetIfNecessary] ()
#4  0x00758b46 in -[UIScrollView(UIScrollViewInternal) _stopScrollingNotify:pin:tramplingDragFlags:] ()
#5  0x00758bda in -[UIScrollView(UIScrollViewInternal) _stopScrollingNotify:pin:] ()
#6  0x0074069e in -[UIScrollView removeFromSuperview] ()
#7  0x0071a715 in -[UIView dealloc] ()
#8  0x00718124 in -[UIView release] ()

感谢。

1 个答案:

答案 0 :(得分:0)

你可以清除_scrollView的代表;

[_scrollView setContentOffset:CGPointMake(offsetX, 0) animated:NO];

当动画结束时,scrollViewDidScroll被调用,你可以使用_scrollView的委托,但它被解除分配,成了一个狂野的指针。