我有一个带有分页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] ()
感谢。
答案 0 :(得分:0)
你可以清除_scrollView
的代表;
或
[_scrollView setContentOffset:CGPointMake(offsetX, 0) animated:NO];
当动画结束时,scrollViewDidScroll
被调用,你可以使用_scrollView
的委托,但它被解除分配,成了一个狂野的指针。