jac*_*ack 21 ios crashlytics ios8
我的应用程序的崩溃日志中出现以下错误
在IOS 8上:
libobjc.A.dylib objc_msgSend + 5 didHideZoomSlider:
Crashed: com.apple.main-thread
EXC_BAD_ACCESS KERN_INVALID_ADDRESS at 0x0000000e
Run Code Online (Sandbox Code Playgroud)
我不知道从哪里开始?有人知道我应该寻找什么吗?
整个堆栈跟踪:
0
libobjc.A.dylib
objc_msgSend + 5
didHideZoomSlider:
1 Foundation
__NSFireDelayedPerform + 468
2
CoreFoundation
__CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ + 14
3
CoreFoundation
__CFRunLoopDoTimer + 650
4
CoreFoundation
__CFRunLoopRun + 1418
5
CoreFoundation
CFRunLoopRunSpecific + 456
6
CoreFoundation
CFRunLoopRunInMode + 106
7
GraphicsServices
GSEventRunModal + 136
8
UIKit
UIApplicationMain + 1440
9
main.m line 8
main
Run Code Online (Sandbox Code Playgroud)
错误消息是否表示ImagePickerCameraView出现问题?
我有时也会得到
Crashed: com.apple.main-thread
EXC_BAD_ACCESS KERN_INVALID_ADDRESS at 0xeec1ff5e
0 libobjc.A.dylib objc_msgSend + 21 didHideZoomSlider:
Run Code Online (Sandbox Code Playgroud)
如果ImagePicker是麻烦制造者,这里是一段代码摘录:
- (IBAction)onTakePictureToolbarButtonPushed:(id)sender {
UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];
[imagePicker setSourceType:
[UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]
? UIImagePickerControllerSourceTypeCamera
: UIImagePickerControllerSourceTypePhotoLibrary
];
[imagePicker setDelegate:self];
[self presentViewController:imagePicker animated:YES completion:nil];
}
- (void)imagePickerController: (UIImagePickerController *)picker didFinishPickingMediaWithInfo: (NSDictionary *)info {
UIImage* rawImage = [info objectForKey: UIImagePickerControllerOriginalImage];
NSData *imageData = UIImageJPEGRepresentation(rawImage, 0.3);
[imageData writeToFile: @"img.jpg" atomically: YES];
[self dismissViewControllerAnimated: YES completion:nil];
[self.tableView reloadData];
}
Run Code Online (Sandbox Code Playgroud)
Rya*_*nJM 29
我已经能够在我的代码中复制这个问题了.这似乎是Apple代码中的一个错误,是一个时间问题.
我没有通过点击实际拍摄照片来复制它,但是当我点击取消时我可以复制它.您可以尝试在代码中执行此操作,并查看它是否适合您.打开相机拍照,然后捏缩放.您将在屏幕上显示一个小缩放滑块.大约4-5秒后,变焦幻灯片逐渐消失.这是时间进入的地方.如果你点击取消就开始褪色,你可以让它崩溃.
我的假设是Apple有一个动画块,它会缩小缩放滑块.在完成该动画时,它调用它didHideZoomSlider:而不检查它对图像选择器的引用.
我认为在我的取消代码上复制更容易,因为它非常简单:
- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker {
[self dismissViewControllerAnimated:YES completion:nil];
}
Run Code Online (Sandbox Code Playgroud)
我的假设是,由于执行得如此之快,因此可以在该动画的中间将其解除.因此,我的解决方案是在很短的时间内实际推迟我对视图的解雇.
- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker {
__weak typeof(self) wSelf = self;
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[wSelf dismissViewControllerAnimated:YES completion:nil];
});
}
Run Code Online (Sandbox Code Playgroud)
我不认为这会"修复"这个问题,但会减少它,以至于我再也无法复制它了.这应该是Apple的错误(我接下来会做).
更新:发送给Apple.
ada*_*mup 13
添加延迟我没有太多运气.崩溃仍然发生在我的情况下(iOS 8和9.0.1).
有一个OpenRadar建议删除CAMZoomSlider可能导致崩溃的代表,这对我来说效果很好.
但是,用户要小心,因为这会操纵私有类,并可能导致App Store提交拒绝...
要修复委托,子类的问题UIImagePickerController并添加以下内容:
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
[self clearZoomSliderDelegateForClass:[self sliderClass] subviews:self.view.subviews];
}
- (void)clearZoomSliderDelegateForClass:(Class)sliderClass subviews:(NSArray *)subviews {
for (UIView *subview in subviews) {
if ([subview isKindOfClass:sliderClass] && [subview respondsToSelector:@selector(setDelegate:)]) {
[subview performSelector:@selector(setDelegate:) withObject:nil];
return;
}
else {
[self clearZoomSliderDelegateForClass:sliderClass subviews:subview.subviews];
}
}
}
- (Class)sliderClass {
for (NSString* prefix in @[@"CAM", @"CMK"]) {
Class zoomClass = NSClassFromString([prefix stringByAppendingString:@"ZoomSlider"]);
if (zoomClass != Nil) {
return zoomClass;
}
}
return Nil;
}
Run Code Online (Sandbox Code Playgroud)
在iOS 9 SDK中,私有CameraKit框架前缀从更改CAM为CMK(只需使用可视调试器检查滑块),因此必须更新以前的解决方法.
此崩溃在日志中也可能如下所示:
0 libobjc.A.dylib 0x3591fae6 objc_msgSend + 6
1 Foundation 0x24d28e59 __NSFireDelayedPerform + 466
...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3590 次 |
| 最近记录: |