从UIImagePickerController获取UIImage的URL

Fra*_*sco 7 objective-c nsurl ios swift

我正在尝试获取从Swift中的Library导入的图像的URL以将其发送到Apple Watch,transferFile(_:metadata)但我有两个错误NSURL.

这是我的代码:

func imagePickerController(picker: UIImagePickerController, didFinishPickingImage image: UIImage!, editingInfo: [NSObject : AnyObject]!)
{
    imagePicked.image = image    
    let imageUrl = editingInfo[UIImagePickerControllerReferenceURL] as! NSURL
    let imageName = imageUrl.path!.lastPathComponent
    let documentDirectory = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true).first as String!
    let localPath = documentDirectory.stringByAppendingPathComponent(imageName)
    let image = editingInfo[UIImagePickerControllerOriginalImage]as! UIImage
    let data = UIImagePNGRepresentation(image)

    data!.writeToFile(localPath, atomically: true)

    let photoURL = NSURL(fileURLWithPath: localPath)

    self.dismissViewControllerAnimated(true, completion: nil);
}
Run Code Online (Sandbox Code Playgroud)

我在使用*imageName和*localPath时遇到错误,因为它说:

'lastPathComponent'不可用:改为使用NSURL上的lastPathComponent.'stringByAppendingPathComponent'不可用:改为在NSURL上使用URLByAppendingPathComponent.

但我无法在Swift 2.0和Xcode 7中做到正确.我哪里出错了?

Mid*_* MP 13

Apple已在其最新版本(iOS 9)中更改了其库NSStringNSURL库中的内容,但这些方法可从iOS 4获得.您可以查看相关的Apple Forum Post以获取更多详细信息.

要修复此错误,您需要更改代码,如:

斯威夫特2:

func imagePickerController(picker: UIImagePickerController, didFinishPickingImage image: UIImage!, editingInfo: [NSObject : AnyObject]!)
{
    let imageUrl          = editingInfo[UIImagePickerControllerReferenceURL] as! NSURL
    let imageName         = imageUrl.lastPathComponent
    let documentDirectory = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true).first as String!
    let photoURL          = NSURL(fileURLWithPath: documentDirectory)
    let localPath         = photoURL.URLByAppendingPathComponent(imageName!)
    let image             = editingInfo[UIImagePickerControllerOriginalImage]as! UIImage
    let data              = UIImagePNGRepresentation(image)

    data!.writeToFile(localPath.absoluteString, atomically: true)

    self.dismissViewControllerAnimated(true, completion: nil);
}
Run Code Online (Sandbox Code Playgroud)

斯威夫特3:

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any])
{
    let imageUrl          = info[UIImagePickerControllerReferenceURL] as! NSURL
    let imageName         = imageUrl.lastPathComponent
    let documentDirectory = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first!
    let photoURL          = NSURL(fileURLWithPath: documentDirectory)
    let localPath         = photoURL.appendingPathComponent(imageName!)
    let image             = info[UIImagePickerControllerOriginalImage]as! UIImage
    let data              = UIImagePNGRepresentation(image)

    do
    {
        try data?.write(to: localPath!, options: Data.WritingOptions.atomic)
    }
    catch
    {
        // Catch exception here and act accordingly
    }

    self.dismiss(animated: true, completion: nil);
}
Run Code Online (Sandbox Code Playgroud)

参考:

  1. lastPathComponent
  2. URLByAppendingPathComponent:


All*_*las 5

从iOS 11开始,您可以使用键UIImagePickerControllerImageURL从信息字典中获取图像URL 。

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
    let imageURL = info[UIImagePickerControllerImageURL] as? URL
}
Run Code Online (Sandbox Code Playgroud)