簡體   English   中英

使用UIImagePickerController獲取iCloud項目在iOS9中失敗

[英]Getting iCloud items with UIImagePickerController fails in iOS9

我有一個這樣的代碼用於從圖書館獲取視頻,並且它在iOS 8.x上完美運行但是當你獲得一個在雲上的項目(並且還沒有下載)時它在iOS9失敗了。

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {

  NSString *mediaType = info[UIImagePickerControllerMediaType];
  if ([mediaType isEqualToString:(NSString *) kUTTypeMovie]) {
    NSURL *url = info[UIImagePickerControllerMediaURL];
    NSData *data = [NSData dataWithContentsOfURL:url]
    .
    .
    .
  }
}

iOS8 ,圖像選擇器在選擇視頻后顯示“壓縮視頻”進度條,然后在完成控制后返回到我的應用程序。

當它在iOS9上失敗時,“壓縮視頻”欄立即消失,控件同時返回我的應用程序。 在這種情況下, UIImagePickerControllerMediaURLUIImagePickerControllerMediaURL nil,從而導致資產失敗。

那么我的問題是:(1)是否有關於這種行為改變的官方提及? (2)如果是故意改變什么是獲得資產的正確方法?

任何信息表示贊賞。

謝謝

// Takeshi

以下是將視頻存儲在iCloud上作為NSData的方法。 它使用Photos框架,因為從iOS9開始不推薦使用ALAssetLibrary:

重要

從iOS 9.0開始,不推薦使用Assets Library框架。 相反,請使用Photos框架,在iOS 8.0及更高版本中,它可以為用戶的照片庫提供更多功能和更好的性能。 有關更多信息,請參閱照片框架參考。

import Photos

func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) {
    self.dismissViewControllerAnimated(true, completion: nil)

    if let referenceURL = info[UIImagePickerControllerReferenceURL] as? NSURL {
        let fetchResult = PHAsset.fetchAssetsWithALAssetURLs([referenceURL], options: nil)
        if let phAsset = fetchResult.firstObject as? PHAsset {
            PHImageManager.defaultManager().requestAVAssetForVideo(phAsset, options: PHVideoRequestOptions(), resultHandler: { (asset, audioMix, info) -> Void in
                if let asset = asset as? AVURLAsset {
                    let videoData = NSData(contentsOfURL: asset.URL)

                    // optionally, write the video to the temp directory
                    let videoPath = NSTemporaryDirectory() + "tmpMovie.MOV"
                    let videoURL = NSURL(fileURLWithPath: videoPath)
                    let writeResult = videoData?.writeToURL(videoURL, atomically: true)

                    if let writeResult = writeResult where writeResult {
                        print("success")
                    }
                    else {
                        print("failure")
                    }
                }
            })
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM