Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/108.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 更改照片设置后应用程序崩溃_Ios_Swift - Fatal编程技术网

Ios 更改照片设置后应用程序崩溃

Ios 更改照片设置后应用程序崩溃,ios,swift,Ios,Swift,我有一个应用程序需要访问你设备上的照片。我检查设备状态,如果他们拒绝访问,我会触发一个模式,警告他们没有提供必要的访问,然后让他们选择转到设置并更正选择 发生这种情况时,我的应用程序会崩溃,并出现以下错误: 此应用程序正在从后台线程修改autolayout引擎,这可能导致引擎损坏和奇怪的崩溃。这将在将来的版本中导致异常 这是我触发重定向的代码。有什么想法可以导致这一点,或者我应该如何做得更好的建议 let title = "You didn't allow us to view your pho

我有一个应用程序需要访问你设备上的照片。我检查设备状态,如果他们拒绝访问,我会触发一个模式,警告他们没有提供必要的访问,然后让他们选择转到设置并更正选择

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

此应用程序正在从后台线程修改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()
    }
})
提前谢谢

更新


我刚刚意识到一些我以前没有意识到的事情。只有在“设置”中激活“照片”开关时,代码才会崩溃。导航本身不会导致应用程序崩溃,而是在应用程序仍在运行时更改照片设置配置。为了验证我的理论,我从未触发弹出窗口,只是进入设置,激活照片开关,应用程序崩溃。因此,崩溃肯定源于照片设置的更改。

从错误中可以看出,您在一个线程上显示视图控制器,而该线程不是主线程,导致在后台线程上的新视图控制器上实现UI功能(自动布局等)

尝试在主队列上封装视图控制器演示代码。大概是这样的:

weak var aBlockSelf = self

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

如果它仍然崩溃,请分析您的应用程序以找出确切的原因。

您在哪里使用此代码?我在函数“showPopup()”中调用它,在检查授权状态后,您在使用Photos API的类中调用
showPopup
方法。我添加了更多的代码我添加了这个,但仍然没有运气,尽管我上次确实意识到了一些事情。只有在“设置”中激活“照片”开关时,代码才会崩溃。导航本身不会导致应用程序崩溃,而是在应用程序仍在运行时更改照片设置配置。