info[UIImagePickerController.InfoKey.mediaURL] 有时为零
info[UIImagePickerController.InfoKey.mediaURL] is sometimes nil
我有一个选择器,在成功选择视频后,我无法获取资产的路径。所以我有这个:
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
if let videoURL = info[UIImagePickerController.InfoKey.mediaURL] as? URL {
MediaManager.shared.sourceType = picker.sourceType
self.metadata.videoURL = videoURL
}
}
通常在使用 phone 保存的视频中,甚至是通过 iTunes 或使用不同工具上传的许多视频中,我总能得到一个路径。
在这种情况下,我使用 AirDrop 传输了一个 400mb 的高分辨率视频 (720p),当我选择它时,它的路径为零...我在这里遗漏了什么吗?
我想这不是因为它的传输方式,因为我收到了关于同一问题的报告,使用另一个应用程序将其传输到 phone。
所有可能的情况你都需要这样处理
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any] {
picker.dismiss(animated: true)
print("info[UIImagePickerController.InfoKey.mediaURL] referenceURL " , info[.referenceURL] )
print("info[UIImagePickerController.InfoKey.mediaURL] phAsset " , info[.phAsset])
print("info[UIImagePickerController.InfoKey.mediaURL] mediaURL " , info[.mediaURL])
if let asset = info[UIImagePickerController.InfoKey.phAsset] as? PHAsset {
asset.getURL { (tempPath) in
DispatchQueue.main.async {
}
}
}
else if let media = info[UIImagePickerController.InfoKey.mediaURL] as? URL {
}
else
if let ref = info[UIImagePickerController.InfoKey.referenceURL] as? URL {
let res = PHAsset.fetchAssets(withALAssetURLs: [ref], options: nil)
res.firstObject!.getURL { (tempPath) in
DispatchQueue.main.async {
}
}
}
}
我有一个选择器,在成功选择视频后,我无法获取资产的路径。所以我有这个:
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
if let videoURL = info[UIImagePickerController.InfoKey.mediaURL] as? URL {
MediaManager.shared.sourceType = picker.sourceType
self.metadata.videoURL = videoURL
}
}
通常在使用 phone 保存的视频中,甚至是通过 iTunes 或使用不同工具上传的许多视频中,我总能得到一个路径。
在这种情况下,我使用 AirDrop 传输了一个 400mb 的高分辨率视频 (720p),当我选择它时,它的路径为零...我在这里遗漏了什么吗?
我想这不是因为它的传输方式,因为我收到了关于同一问题的报告,使用另一个应用程序将其传输到 phone。
所有可能的情况你都需要这样处理
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any] {
picker.dismiss(animated: true)
print("info[UIImagePickerController.InfoKey.mediaURL] referenceURL " , info[.referenceURL] )
print("info[UIImagePickerController.InfoKey.mediaURL] phAsset " , info[.phAsset])
print("info[UIImagePickerController.InfoKey.mediaURL] mediaURL " , info[.mediaURL])
if let asset = info[UIImagePickerController.InfoKey.phAsset] as? PHAsset {
asset.getURL { (tempPath) in
DispatchQueue.main.async {
}
}
}
else if let media = info[UIImagePickerController.InfoKey.mediaURL] as? URL {
}
else
if let ref = info[UIImagePickerController.InfoKey.referenceURL] as? URL {
let res = PHAsset.fetchAssets(withALAssetURLs: [ref], options: nil)
res.firstObject!.getURL { (tempPath) in
DispatchQueue.main.async {
}
}
}
}