2015-07-11 4 views
-2

У меня есть разворот, который возвращается к предыдущему контроллеру и сохраняет изображение в библиотеке PHAsset. Работает развязка, работы по сохранению, единственная проблема заключается в том, что она разматывается перед сохранением изображения. Из-за этого изображение не отображается на контроллере представления, на котором не было необходимости, поскольку контроллер представления был представлен до того, как изображение было сохранено (для сохранения изображения требуется немного времени, тогда как оно возвращается к представлению контроллер очень быстро). Мне было интересно, есть ли способ отключиться от предыдущего контроллера ТОЛЬКО, когда ПОСЛЕ сохранения фотографии не сразу.Сделайте что-нибудь, прежде чем разматывать segue (swift)

Вот мой код:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    if segue.identifier == "savePicture" { 

     //Image to be saved 
     let newImage = self.appraisalPic.image 

     //Store picture to PHAssets 
     let priority = DISPATCH_QUEUE_PRIORITY_DEFAULT 
     dispatch_async(dispatch_get_global_queue(priority, 0), { 
      PHPhotoLibrary.sharedPhotoLibrary().performChanges({ 
       let createAssetRequest = PHAssetChangeRequest.creationRequestForAssetFromImage(newImage) 
       let assetPlaceholder = createAssetRequest.placeholderForCreatedAsset 
       let albumChangeRequest = PHAssetCollectionChangeRequest(forAssetCollection: self.assetCollection, assets: self.photosAsset) 
       albumChangeRequest.addAssets([assetPlaceholder]) 
       }, completionHandler: {(success, error)in 
        dispatch_async(dispatch_get_main_queue(), { 
         NSLog("Adding Image to Library -> %@", (success ? "Success":"Error!")) 

       //Need code here which doesn't do segue until AFTER picture is saved 
        }) 
      }) 

     }) 
    } 
} 
+1

Подумайте о «асинхронном». – matt

+0

Хммм ... Я новичок в Swift, и не знаю, что вы имеете в виду ... Не могли бы вы пояснить, пожалуйста, Мэтт? Благодарю. –

ответ

1

Это выражение: dispatch_async(dispatch_get_global_queue(priority, 0)

будет выполнять все, что в фоновом режиме (пока вы не сделаете что-то опять явно на главной очереди).

Просто устраните все dispatch_async звонки, чтобы выполнить всю работу над основной нитью. Если это занимает слишком много времени, сообщите об этом пользователю, чтобы он знал, что есть короткое ожидание до тех пор, пока не исчезнет режим размотки.

+0

Спасибо, Mundi за разъяснение. Если вы не возражаете, можете ли вы удалить dispatch_async для меня из моего кода? Я экспериментирую с устранением dispatch_async, но я генерирую массу ошибок. Благодаря! –

+0

Я понял. Еще раз спасибо. –

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

  • Нет связанных вопросов^_^