更改照片设置后应用崩溃

时间:2015-11-01 04:24:28

标签: ios swift

我的应用需要访问您设备上的照片。我检查设备状态,如果他们拒绝访问,我会触发一个模态,警告他们没有提供必要的访问权限,然后给他们选择去他们的设置并更正选择。

发生这种情况时,我的应用程序崩溃并出现以下错误:

  

此应用程序正在从后台线程修改autolayout引擎,这可能导致引擎损坏和奇怪的崩溃。这将在将来的版本中引发异常。

这是我触发重定向的代码。可能导致这种情况的任何想法或关于我应该如何做得更好的建议?

let title = "You didn't allow us to view your photos!"
let message = "Without access, we cannot help you add photos from your device."
let alertController = UIAlertController(title: title, message: message, preferredStyle: UIAlertControllerStyle.Alert)

alertController.addAction(UIAlertAction(title: "I know!", style: UIAlertActionStyle.Cancel, handler: nil))
alertController.addAction(UIAlertAction(title: "Settings (Required)", style: UIAlertActionStyle.Default, handler: { (action: UIAlertAction) -> Void in

    let settingsURL = NSURL(string: UIApplicationOpenSettingsURLString)
    UIApplication.sharedApplication().openURL(settingsURL!)
}))

self.presentViewController(alertController, animated: true, completion: nil)

在我从以下地点调用的方法中调用此代码:

PHPhotoLibrary.requestAuthorization({ (status: PHAuthorizationStatus) -> Void in
    if(status == .Authorized){
        self.getPhonePhotos()
    }else{
        self.showDeniedPhotosPopup()
    }
})

提前致谢。

更新

我刚刚意识到我之前没有做过的事情。如果我激活"照片"代码只会崩溃切换设置。导航本身不会导致应用程序崩溃,它会在应用程序仍在运行时更改照片设置配置。为了测试我的理论,我从未触发弹出窗口,只是去了设置,并激活了照片开关和应用程序崩溃。因此,崩溃绝对是从照片设置的变化中获取的。

1 个答案:

答案 0 :(得分:2)

从错误出现,您将在一个线程上呈现您的视图控制器,该线程不是导致在后台线程上的新视图控制器上实现UI内容(自动布局等)的主线程。

尝试在主队列中封装视图控制器演示代码。像这样:

weak var aBlockSelf = self

dispatch_async(dispatch_get_main_queue(), {
    aBlockSelf.presentViewController(alertController, animated: true, completion: nil)
})

如果它仍然崩溃,请分析您的应用程序以找出确切的罪魁祸首。