gpt4 book ai didi

iphone - 如何确定 UIScrollView 崩溃是在我的代码中还是 Apple 的代码中?

转载 作者:行者123 更新时间:2023-12-03 19:01:38 27 4
gpt4 key购买 nike

我定期在 iPhone 上运行的调试版本中重现崩溃,其中涉及 UIScrollView,但堆栈框架中没有我的代码。我想知道这是我的代码中的错误还是 Apple 的错误,并且我无法查询 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 respondsToSelector:]: message sent to deallocated instance 0x5d77ad0

在 MyViewController 中,我确实有一个滚动 tableView 的调用:

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

因为它是动画的,所以 View 很可能在滚动动画完成之前从导航 Controller 中弹出。看起来 UIView 的工作应该是在卸载时取消或等待任何挂起的滚动操作。因此,我认为这是苹果代码中的一个错误。

或者我错了,是否有某种检查我的 View 必须在卸载之前检查它是否正在滚动,或者我是否完全误读了这次崩溃?

仅供引用,此错误似乎也仅在低内存条件下重现,即我已经开始接收 didReceiveMemoryWarning 回调。

谢谢大家,

埃里克

最佳答案

首先,委托(delegate)应该是弱/分配类型。但本例中的事件有一个很常见的现象由滚动动画驱动的微妙障碍。如果您使用动画内容偏移量更改您的 ScrollViews 强烈需要在 dealloc 方法中将其委托(delegate)设置为nil

否则你会得到以下结果

[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 被释放!

关于iphone - 如何确定 UIScrollView 崩溃是在我的代码中还是 Apple 的代码中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2328892/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com