2010-02-24 62 views
5

我周期性地重新编译运行在我的iPhone上的调试版本的崩溃,涉及UIScrollView,而我的代码没有在堆栈帧中。我想知道它是否是我的代码或Apple的错误,并且我无法查询Apple bug数据库以查看它是否已被报告。回溯显示:如何确定UIScrollView崩溃是在我的代码还是Apple?

#0 0x30218060 in ___forwarding___() 
#1 0x3020eda0 in __forwarding_prep_0___() 
#2 0x309c4ce8 in -[UIScrollView(UIScrollViewInternal) _scrollViewAnimationEnded]() 
#3 0x3025af60 in -[NSObject performSelector:withObject:]() 
#4 0x3098ea94 in -[UIAnimator stopAnimation:]() 
#5 0x3098e5a8 in -[UIAnimator(Static) _advance:]() 
#6 0x3098e460 in LCDHeartbeatCallback() 
#7 0x32047fe8 in HeartbeatVBLCallback() 
#8 0x32a1c3ec in IOMobileFramebufferNotifyFunc() 
#9 0x3188a74c in IODispatchCalloutFromCFMessage() 
#10 0x3020d0b0 in __CFMachPortPerform() 
#11 0x30254a76 in CFRunLoopRunSpecific() 
#12 0x3025416a in CFRunLoopRunInMode() 
#13 0x320452a4 in GSEventRunModal() 
#14 0x308f037c in -[UIApplication _run]() 
#15 0x308eea94 in UIApplicationMain() 
#16 0x0000280c in main (argc=1, argv=0x2ffff58c) at /Users/esilver/Documents/Husband Material/main.m:14 

问题显然在UIScrollView(UIScrollViewInternal) _scrollViewAnimationEnded。 GDB报告:

​​

在MyViewController,我有打电话来滚动的tableView:

[self.tableView scrollToRowAtIndexPath:scrollIndexPath atScrollPosition:UITableViewScrollPositionBottom animated:YES]; 

因为它是动态的,它显然是可能的,认为可以得到滚动之前弹出导航控制器动画完成。它似乎应该是UIView的工作,当它卸载时取消或等待任何悬而未决的滚动操作。因此,我认为这是Apple代码中的一个错误。

还是我错了,而且是有某种检查我的观点必须做检查,如果是滚动前卸货,还是我完全误读了这个崩溃?

FYI,此错误也只出现在低存储器条件REPRO,即我已开始接收didReceiveMemoryWarning回调。

感谢所有,

埃里克

回答

1

起初,代表应该是weak/assign类型。但在这种情况下,有一个非常普遍的滚动动画驱动的细微障碍。如果您使用了动画内容偏移变化为 您ScrollViews你强烈需要将其代表的dealloc方法设置为

否则,你将获得以下

[YourViewController respondsToSelector:]: message sent to deallocated instance 

非常常见的例子:

1. _tableView is ivar of YourViewController 
2. _tableView.delegate = self; 
3. - (void)scrollViewDidScroll:(UIScrollView *)scrollView is implemented at YourViewController 
4. at some point you call [_tableView scrollToRowAtIndexPath:indexPath 
    atScrollPosition:UITableViewScrollPositionBottom animated:YES]; 
    or [_tableView setContentOffset:CGPoint animated:YES] 
    and try to close YourViewController 

的_tableView由CoreAnimation保留,但YourViewController被释放!

相关问题