У меня есть этот код:
@IBAction func importButtonPressed(_ sender: Any) {
self.imagePicker.sourceType = .photoLibrary
self.imagePicker.allowsEditing = true
self.imagePicker.mediaTypes = [kUTTypeMovie as String, kUTTypeImage as String]
self.present(self.imagePicker,animated: true, completion: nil)
}
Это прекрасно представляет UIImagePicker.Затем, когда я хочу использовать выбранный элемент, чтобы получить, скажем, дату PHAsset:
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
guard info[UIImagePickerControllerMediaType] != nil else { return }
let mediaType = info[UIImagePickerControllerMediaType] as! CFString
switch mediaType {
case kUTTypeImage:
if let pickedImage = info[UIImagePickerControllerOriginalImage] as? UIImage {
...
}
break
case kUTTypeMovie:
if let videoURL = info[UIImagePickerControllerMediaURL] as? URL, let pickedAsset = info[UIImagePickerControllerPHAsset] as? PHAsset {
print("kUTTypeMovie")
MyVariables.isScreenshot = false
let creationDate = pickedAsset.creationDate
print(creationDate,"creationDate")
}
break
case kUTTypeLivePhoto:
print("livePhoto")
dismiss(animated: true, completion: nil)
break
default:
dismiss(animated: true, completion: nil)
print("something else")
break
}
}
Теперь, когда я выбираю, например, видео, print("kUTTypeMovie")
терпит неудачу, я думаю, потому что let pickedAsset = info[UIImagePickerControllerPHAsset] as? PHAsset
терпит неудачу
В другом месте ( UIImagePickerControllerDelegate получить дату от выбранного изображения в iOS 11 ) Я видел, что, возможно, это потому, что мне нужна авторизация для выбора PHAssets.
Поэтому я изменяю свой первый блок кода на:
@IBAction func importButtonPressed(_ sender: Any) {
let status = PHPhotoLibrary.authorizationStatus()
switch status {
case .authorized:
PHPhotoLibrary.requestAuthorization({status in
if status == .authorized {
self.imagePicker.sourceType = .photoLibrary
self.imagePicker.allowsEditing = true
self.imagePicker.mediaTypes = [kUTTypeMovie as String, kUTTypeImage as String]
self.present(self.imagePicker,animated: true, completion: nil)
}
})
case .denied:
print("denied")
// probably alert the user that they need to grant photo access
case .notDetermined:
print("not determined")
case .restricted:
print("restricted")
// probably alert the user that photo access is restricted
}
}
Однако теперь, когда я нажимаю кнопку импорта, он вылетает с ошибкой lldb:
libsystem_kernel.dylib`__abort_with_payload:
0x1854f7040 <+0>: mov x16, #0x209
0x1854f7044 <+4>: svc #0x80
-> 0x1854f7048 <+8>: b.lo 0x1854f7060 ; <+32>
0x1854f704c <+12>: stp x29, x30, [sp, #-0x10]!
0x1854f7050 <+16>: mov x29, sp
0x1854f7054 <+20>: bl 0x1854d8bdc ; cerror_nocancel
0x1854f7058 <+24>: mov sp, x29
0x1854f705c <+28>: ldp x29, x30, [sp], #0x10
0x1854f7060 <+32>: ret
Такясно, что я не делаю это правильно.Как я должен это сделать?