[英]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上失敗時,“壓縮視頻”欄立即消失,控件同時返回我的應用程序。 在這種情況下, UIImagePickerControllerMediaURL
值UIImagePickerControllerMediaURL
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.