我有一个这样的代码用于从图书馆获取视频,它在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
值变为零,从而导致资产失败。
然后我的问题是: (1)有关于这种行为改变的官方提及吗? (2)如果是故意改变什么是获得资产的正确方法?
感谢任何信息。
由于
// Takeshi
答案 0 :(得分:1)
以下是将视频存储在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")
}
}
})
}
}
}