我在导航视图中使用“后退”按钮显示模态表视图。后退按钮向模态视图的委托发送消息以关闭模态视图。如果我滚动表格视图,然后在表格视图仍在滚动时点击导航栏上的“返回”按钮,则应用程序会崩溃并显示以下消息:
*** -[UILayoutContainerView setUseFastMode:]: message sent to deallocated instance 0xef74650
当我获得PO 0xef74650时,我得到了这个:
(int) $1 = 251086416 [no Objective-C description available]
以前有人经历过吗?什么是变通方法或修复方法?
答案 0 :(得分:8)
我相信这是iOS 5.1中的一个错误,当动画解雇当前正在滚动的模态时会发生这种错误。我收到用户的报告说我的应用程序崩溃了,当我调查时我遇到了同样的错误。
我使用最少量的代码/视图创建了一个新项目,并且能够重现此崩溃。到目前为止,我发现的唯一解决方法是在解除模态时禁用动画。我已经向Apple提交了一份错误报告。
答案 1 :(得分:3)
我遇到了类似的问题,如果表格仍在滚动,我的应用程序崩溃了,我触发了一个模态视图显示在表格上方。我的实例中的崩溃被抛入cellForRowAtIndexPath
,indexPath已被解除分配。
我通过停止在viewWillDisappear
方法中滚动来修复它: -
- (void) viewWillDisappear:(BOOL)animated {
[self.tableView setContentOffset:self.tableView.contentOffset animated:NO];
}
希望这可能有助于研究相关问题的人!
答案 2 :(得分:1)
iOS 5在UIView上的FastModeAdditions类别中有一个错误。如果您在与模式视图控制器被关闭的同一个运行循环中滚动滚动视图的子视图,则会显示此错误。
Exception Type: EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: KERN_INVALID_ADDRESS at 0xa0000008
Crashed Thread: 0
Thread 0 name: Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0 libobjc.A.dylib 0x34bdef78 objc_msgSend + 16
1 UIKit 0x35309f9e -[UIView(FastModeAdditions) _setContainerLayoutViewForFastMode:] + 98
2 UIKit 0x351701cc -[UIView dealloc] + 568
3 UIKit 0x3545a39e -[UIDropShadowView dealloc] + 86
4 libobjc.A.dylib 0x34be016e _objc_rootRelease + 30
5 CoreFoundation 0x32b882e0 CFRelease + 88
我们发现的最佳工作是执行Selector:afterDelay:解雇。这会在稍后的运行循环中强制解雇,并且不再发生崩溃。
在iOS 6上不会发生这种情况。
答案 3 :(得分:0)
签入setUseFastMode:
以确保您没有发布以后尝试访问的内容。
[someObject release];
答案 4 :(得分:0)
当点击模态中的按钮时,我正在解雇模态,如果其表仍在滚动,则会导致此崩溃。这是不正确的:在将解除代码移动到呈现视图控制器并将其作为委托方法的一部分调用之后,崩溃不再发生。
答案 5 :(得分:0)
这对我有用:
NSIndexPath *myIP = [NSIndexPath indexPathForRow:0 inSection:0]
[self.tblChildProducts scrollToRowAtIndexPath:myIP atScrollPosition:UITableViewScrollPositionTop animated:NO]
[self dismissModalViewControllerAnimated:YES]
@Slee 5月24日&12;在11:18