当我从UIWebView
滑动到UIScrollView
时,我通常会更新该应用,但并非总是会崩溃。有时它会给出标题中显示的错误。大多数情况下没有错误消息。奇怪的是,如果我使用按钮移动到下一个屏幕,它不会崩溃。按钮和滑动手势识别器调用相同的处理程序。
我在运行iOS 5.1.1的第一代iPad上遇到了崩溃据我所知,它在6月份我提交的任何版本的iOS 5上运行良好。我从应用程序商店下载了该应用程序的副本,它也在运行iOS 5.1.1的iPad上崩溃。
我的解决方法是禁用在低于6.0的版本上滑动。
if ( SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"6.0") ) {
UISwipeGestureRecognizer *swipeNext;
swipeNext = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipeNext)];
[swipeNext setDirection:(UISwipeGestureRecognizerDirectionLeft)];
[self.view addGestureRecognizer:swipeNext];
}
我在iOS6和iOS7中测试时工作正常。我没有设置_canScrollX
。事实上,我甚至无法在文档中找到该方法[编辑:它可能是属性,而不是方法]。我只在scrollview上设置了两个属性。
CGFloat quizHeight = ceilf(.9f * _parentView.bounds.size.height - verticalOffset);
CGRect quizBounds = CGRectMake(0, verticalOffset, _parentView.bounds.size.width, quizHeight );
_quizView = [[UIScrollView alloc] initWithFrame:quizBounds];
_quizView.delaysContentTouches = YES;
_quizView.maximumZoomScale = 1.0f; // Helps with swiping
我不认为这是一个内存问题,因为它通常会在第一个屏幕上崩溃。我检查了我的代码中iOS5不支持的方法,但没有。但即使有,我认为应用程序会一直崩溃,而不是一些时间,它会给我一个关于导致问题的选择器的错误消息。
所以我很难过。有什么想法吗?
[编辑{我尝试在启用僵尸的情况下运行,并且没有任何问题。当我使用屏幕按钮从屏幕移动到屏幕时,实时字节会波动但返回到大约2.4MB。如果我滑动,我会在仪器中发生故障并没有说明原因。
从屏幕到屏幕的成功移动和崩溃之间的唯一区别是滑动手势。屏幕上的按钮和滑动手势识别器都调用相同的方法。
这是崩溃日志。
Thread 0 name: Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0 libobjc.A.dylib 0x336f0f78 objc_msgSend + 16
1 UIKit 0x332f50e2 -[UIScrollViewPanGestureRecognizer _centroidMovedTo:atTime:] + 298
2 UIKit 0x332f4f50 -[UIPanGestureRecognizer touchesMoved:withEvent:] + 308
3 UIKit 0x332f4d52 -[UIScrollViewPanGestureRecognizer touchesMoved:withEvent:] + 70
4 UIKit 0x331ec484 -[UIWindow _sendGesturesForEvent:] + 356
5 UIKit 0x331ec1ee -[UIWindow sendEvent:] + 82
6 UIKit 0x331d268e -[UIApplication sendEvent:] + 350
7 UIKit 0x331d1f34 _UIApplicationHandleEvent + 5820
8 GraphicsServices 0x337c4224 PurpleEventCallback + 876
9 CoreFoundation 0x35aa651c __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 32
10 CoreFoundation 0x35aa64be __CFRunLoopDoSource1 + 134
11 CoreFoundation 0x35aa530c __CFRunLoopRun + 1364
12 CoreFoundation 0x35a2849e CFRunLoopRunSpecific + 294
13 CoreFoundation 0x35a28366 CFRunLoopRunInMode + 98
14 GraphicsServices 0x337c3432 GSEventRunModal + 130
15 UIKit 0x33200cce UIApplicationMain + 1074
16 Comprehension 0x000623d4 main (main.m:14)
17 Comprehension 0x00062388 start + 32
答案 0 :(得分:0)
这似乎是iOS5和旧iPad上的计时问题。
我将iOS5的滑动手势识别器更改为
swipeNext = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipeNextAfterDelay)];
并添加了此处理程序,可以延迟刷卡后运行的代码。
- (void)handleSwipeNextAfterDelay {
[self performSelector:@selector(handleSwipeNext) withObject:nil afterDelay:0.2];
}