【问题标题】:iOS CAMImagePickerCameraViewController crashes in iOS 10.3.1iOS CAMImagePickerCameraViewController 在 iOS 10.3.1 中崩溃
【发布时间】:2017-05-02 09:01:30
【问题描述】:

我的应用在更新到 ios 10.3.1 后开始崩溃。当我尝试使用相机选择视频时发生崩溃。该应用程序在较旧的 ios 版本(9.3.5 和 10.2.1)上运行良好。 崩溃日志显示崩溃的是 CAMImagePickerCameraViewController:

OS Version:          iPhone OS 10.3.1 (14E304)
Report Version:      104

Exception Type:  EXC_BAD_ACCESS (SIGSEGV)
Exception Subtype: KERN_INVALID_ADDRESS at 0x00000019
Termination Signal: Segmentation fault: 11
Termination Reason: Namespace SIGNAL, Code 0xb
Terminating Process: exc handler [0]
Triggered by Thread:  0

Filtered syslog:
None found

Thread 0 name:  Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0   libobjc.A.dylib                 0x1b946f4e realizeClass(objc_class*) + 18
1   libobjc.A.dylib                 0x1b94704c realizeClass(objc_class*) + 272
2   libobjc.A.dylib                 0x1b94abc6 lookUpImpOrForward + 94
3   libobjc.A.dylib                 0x1b94ab64 _class_lookupMethodAndLoadCache3 + 26
4   libobjc.A.dylib                 0x1b9511ae _objc_msgSend_uncached + 14
5   CameraUI                        0x2f8d6896 -[CAMImagePickerCameraViewController _handleCapturedImagePickerVideoAtPath:withEditingMetadata:] + 166
6   CameraUI                        0x2f8d609a -[CAMImagePickerCameraViewController cropOverlayWasOKed:] + 478
7   UIKit                           0x2191e804 -[UIApplication sendAction:to:from:forEvent:] + 76
8   UIKit                           0x2191e798 -[UIControl sendAction:to:forEvent:] + 62
9   UIKit                           0x21908dc8 -[UIControl _sendActionsForEvents:withEvent:] + 478
10  UIKit                           0x2191e0d4 -[UIControl touchesEnded:withEvent:] + 604
11  UIKit                           0x2191dc1e -[UIWindow _sendTouchesForEvent:] + 2094
12  UIKit                           0x21918b5e -[UIWindow sendEvent:] + 2798
13  UIKit                           0x218ea702 -[UIApplication sendEvent:] + 308
14  UIKit                           0x2207dd36 __dispatchPreprocessedEventFromEventQueue + 2254
15  UIKit                           0x220786da __handleEventQueue + 4186
16  UIKit                           0x22078abc __handleHIDEventFetcherDrain + 144
17  CoreFoundation                  0x1c677fdc __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 12
18  CoreFoundation                  0x1c677b04 __CFRunLoopDoSources0 + 424
19  CoreFoundation                  0x1c675f50 __CFRunLoopRun + 1160
20  CoreFoundation                  0x1c5c90ee CFRunLoopRunSpecific + 470
21  CoreFoundation                  0x1c5c8f10 CFRunLoopRunInMode + 104
22  GraphicsServices                0x1dd73b40 GSEventRunModal + 80
23  UIKit                           0x2194de82 UIApplicationMain + 150
24  Stringr Dev                     0x00181604 0x82000 + 1046020
25  libdyld.dylib                   0x1bdb64ea start + 2

我在 crashlytics 中看到的类似崩溃是:

Crashed: com.apple.main-thread
EXC_BAD_ACCESS KERN_INVALID_ADDRESS 0x00000000c839e660

libobjc.A.dylib realizeClass(objc_class*) + 25

libobjc.A.dylib _objc_msgSend_uncached + 14

CameraUI    -[CAMImagePickerCameraViewController _handleCapturedImagePickerVideoAtPath:withEditingMetadata:]

CameraUI    -[CAMImagePickerCameraViewController cropOverlayWasOKed:]

UIKit   UIApplicationMain + 150

这是我的代码的摘录:

    /// Presents the video selection/capture dialog
    fileprivate func presentPickerController() {
        // Request authorization to access photo library if not yet granted
        PHPhotoLibrary.requestAuthorization { status in
            guard status == .authorized else {
                self.alert(.notPermittedToSelectVideos)
                return
            }

            // Create the custom asset picker (to get multiple at once)
            let assetsPickerController = DKImagePickerController()
            assetsPickerController.defaultAssetGroup = .smartAlbumVideos
            assetsPickerController.showsCancelButton = true
            assetsPickerController.assetType = .allVideos
            assetsPickerController.didSelectAssets = self.didSelectAssets
            assetsPickerController.didCancel = self.didCancel
            assetsPickerController.disableCaptureWhenSelected = true
            assetsPickerController.createCaptureController = self.createCaptureController

            self.assetsPickerController = assetsPickerController
            DispatchQueue.main.async {
                self.present(assetsPickerController, animated: true) {}
            }
        }
    }

fileprivate func createCaptureController() -> UIViewController? {
        let imagePickerController = UIImagePickerController()
        imagePickerController.sourceType = .camera
        imagePickerController.mediaTypes = [kUTTypeMovie as String]
        imagePickerController.videoQuality = .typeHigh
        imagePickerController.delegate = self
        guard canCaptureVideo() else {
            Logger.info?.message("Attempted to capture video when cannot capture video")
            alert(.cantCaptureVideo)
            return nil
        }

        guard permittedToCaptureVideo() else {
            Logger.info?.message("Attempted to capture video when cannot capture video")
            alert(.notPermittedToCaptureVideo)
            return nil
        }

        guard permittedToCaptureAudio() else {
            Logger.info?.message("Attempted to capture video when cannot capture audio")
            alert(.notPermittedToCaptureAudio)
            return nil
        }

        return imagePickerController
    }

崩溃的控制器不是我的应用程序的一部分,我无法触摸它。有谁知道如何解决这个问题? CAMImagePickerCameraViewController 的用途是什么?为什么只在 ios 10.3.1 上会崩溃,而在之前的版本上不会崩溃?

【问题讨论】:

  • 我们遇到了完全相同的问题。你找到解决办法了吗?

标签: ios crash uiimagepickercontroller


【解决方案1】:

我这里有一些类似的问题,我发现这是代表的问题。

我的问题是 viewController 保留了一个对象,我将对象的弱委托设置为 viewController,当 viewController 被解除并且对象仍然尝试使用委托做某事时,发生了崩溃...

所以我认为弱引用出错了......不知道为什么会发生,但你可以通过向 viewController dealloc 方法添加代码来解决这个问题 - (void)dealloc{ self.assetsPickerController = nil }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-17
    • 2013-11-25
    • 2015-06-14
    • 2011-12-27
    • 2018-09-16
    • 1970-01-01
    相关资源
    最近更新 更多