2015-11-01 4 views
2

У меня есть приложение, которое нуждается в доступе к фотографиям на вашем устройстве. Я проверяю статус устройства, и если они отказывают в доступе, я запускаю модальный код, который предупреждает их, что они не предоставляют необходимый доступ, а затем дает им возможность перейти к их настройкам и исправить выбор.Приложение Сбой после смены настроек фотографии

Когда это происходит, мое приложение падает со следующей ошибкой:

This application is modifying the autolayout engine from a background thread, which can lead to engine corruption and weird crashes. This will cause an exception in a future release.

Вот мой код для запуска редиректа. Любые идеи, что может быть причиной этого или предложения о том, как я должен делать это лучше?

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() 
    } 
}) 

Спасибо заранее.

UPDATE

Я только что понял, что-то я раньше не делал. Код срабатывает только в том случае, если я активирую переключатель «Фото» в настройках. Сама по себе навигация не приводит к сбою приложения, что приводит к изменению конфигурации настроек фотографий во время работы приложения. Чтобы проверить мою теорию, я никогда не вызывал всплывающее окно, а просто переходил к настройкам и активировал переключатель фотографий, и приложение разбилось. Таким образом, авария определенно зависит от изменения настроек фото.

+0

Где вы используете этот код? –

+0

Я называю это функцией «showPopup()» – Unome

+0

И где вы называете метод showPopup? –

ответ

2

Извините, что вы представляете свой контроллер просмотра в потоке, который не является основным потоком, который ведет к реализации элементов интерфейса (автоматический макет и т. Д.) На вашем новом контроллере представления на фоновом потоке.

Попробуйте инкапсулировать код представления контроллера представления в главной очереди. Что-то вроде этого:

weak var aBlockSelf = self 

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

Если он по-прежнему падает, профиль приложения, чтобы узнать точную виновника.

+0

Я добавил это и до сих пор не повезло, хотя в прошлый раз я кое-что понял. Код срабатывает только в том случае, если я активирую переключатель «Фото» в настройках. Сама по себе навигация не приводит к сбою приложения, что приводит к изменению конфигурации настроек фотографий во время работы приложения. – Unome

Смежные вопросы