Câu hỏi "Tạo một định dạng hình ảnh với một loại không rõ là một lỗi" với UIImagePickerController


Trong khi chọn một hình ảnh từ bộ chọn hình ảnh trong iOS 10 Swift 3 Tôi gặp lỗi - Creating an image format with an unknown type is an error

 func imagePickerController(picker: UIImagePickerController, didFinishPickingImage image: UIImage, editingInfo: [String : AnyObject]?) {

    imagePost.image = image
    self.dismiss(animated: true, completion: nil)
}

Hình ảnh không được chọn và cập nhật. Tôi cần trợ giúp hoặc gợi ý để biết cú pháp hay bất cứ điều gì liên quan đến phương pháp này đã được thay đổi trong iOS10 hoặc Swift 3 hoặc có cách nào khác để làm điều này không.


76
2017-08-18 04:14


gốc


Thay đổi từ AnyObject thành Bất kỳ didFinishPickingMediaWithInfo info: [String : Any] - Leo Dabus
Bạn chỉ nên để Xcode tự động hoàn thành nó cho bạn. Phương pháp bạn đang sử dụng tôi cho là không được chấp nhận - Leo Dabus
Cảm ơn Leo thực sự là một bình luận hữu ích. - Jeet
cùng một vấn đề ở đây, và String: Bất kỳ dường như không giúp đỡ - TheeBen
Vẫn không làm việc . Tôi đang sử dụng phiên bản 8.0 (8A218a) - Kegham K.


Các câu trả lời:


Đoạn mã được đề cập dưới đây đã giải quyết được vấn đề cho tôi -

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) {
    if let image = info[UIImagePickerControllerOriginalImage] as? UIImage {
        imagePost.image = image
    } else{
        print("Something went wrong")
    }

    self.dismiss(animated: true, completion: nil)
}

28
2017-08-18 08:34



Điều này không giải quyết được vấn đề cho tôi. Tôi đã cập nhật chức năng và vẫn nhận được thông báo lỗi ngay lập tức khi chức năng này được gọi. Và sử dụng UIImage không hoạt động sau đó. - Tim
stackoverflow.com/a/39993846/3150830 - Ashildr
@Tim Tôi vẫn nhận được lỗi, nhưng truy cập vào hình ảnh hoạt động tốt. - MobileVet
@jeetendra Điều này giải quyết vấn đề của tôi, nhưng nó vẫn cho tôi một cảnh báo "Phương pháp thể hiện (didFinishPickingMediaWithInfo) gần như phù hợp với yêu cầu tùy chọn của nó." Khi tôi thêm private hoặc nonobj befor func, thì cảnh báo đã biến mất nhưng phương thức này không được gọi. - Arpit Dhamane
Mặc dù điều này đã giúp tôi giải quyết vấn đề hình ảnh không xuất hiện nhưng lỗi vẫn xuất hiện trong bảng điều khiển. Cảm ơn mặc dù. - Kruger Brent


Nhớ thêm đại biểu vào bản thân

let picker = UIImagePickerController()
picker.delegate = self // delegate added

11
2017-09-25 21:23



Ha, anh đã cứu tôi. Xcode 7 sẽ biên dịch và hoạt động đúng cách mà không cần giao nhiệm vụ ... điên rồ. - MobileVet


Dưới đây mã đã giải quyết vấn đề:

Nếu người dùng thực hiện thay đổi đối với hình ảnh được chọn, chỉ kéo hình ảnh đó bằng cách khác kéo nguồn hình ảnh gốc mà không có bất kỳ thay đổi nào và cuối cùng loại bỏ bộ điều khiển xem bộ chọn hình ảnh.

public func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]){
    if let image = info[UIImagePickerControllerEditedImage] as? UIImage {
        imageView.image = image
    }
    else if let image = info[UIImagePickerControllerOriginalImage] as? UIImage {
        imageView.image = image
    } else{
        print("Something went wrong")
    }

    self.dismiss(animated: true, completion: nil)
}

9
2017-12-15 14:13



Chào mừng bạn đến với Stack Overflow! Mã chỉ câu trả lời không phải là rất hữu ích của riêng mình. Nó sẽ giúp ích nếu bạn có thể thêm một số chi tiết giải thích cách thức / tại sao nó trả lời câu hỏi - Jeet
Đây sẽ là câu trả lời đúng. Hoạt động hoàn hảo. - user3286381


Nếu bạn cho phép chỉnh sửa ảnh imageController.allowsEditing = true sau đó bạn sẽ cần phải có được hình ảnh đã chỉnh sửa trước:

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) {
    picker.dismissViewControllerAnimated(true, completion: nil)

    if let image = info[UIImagePickerControllerEditedImage] as? UIImage {
        imagePost.image = image
    } else if let image = info[UIImagePickerControllerOriginalImage] as? UIImage {
        imagePost.image = image
    } else {
        imagePost.image = nil
    }
}

7
2017-09-25 06:10



Tôi đã thực hiện phản hồi của bạn nhưng tôi vẫn gặp lỗi. Bạn vui lòng đọc câu hỏi của tôi không stackoverflow.com/questions/50189732 - bibscy


Các giải pháp được chấp nhận bởi Jeetendra Choudhary works.Mặc dù trong Xcode 8 với Swift 3, tôi nhận thấy rằng nó tạo ra một cảnh báo: Instance method 'imagePickerController(_:didFinishPickingMediaWithInfo:)' nearly matches optional requirement 'imagePickerController(_:didFinishPickingMediaWithInfo:)' of protocol 'UIImagePickerControllerDelegate'

enter image description here

và gợi ý thêm @nonobjc hoặc là riêng tư từ khóa để tắt tiếng cảnh báo.Nếu bạn tắt tiếng cảnh báo bằng cách sử dụng các đề xuất này, giải pháp không còn hoạt động nữa.


5
2017-10-12 08:24



Cảm ơn cho làm rõ có ý nghĩa. - Jeet
Vấn đề là "AnyObject" - chữ ký Swift 3 chính xác sử dụng "Any". Không sử dụng các giải pháp được đề xuất Xcode để tắt tiếng cảnh báo. - Zig


Tôi thấy các hình ảnh mặc định trong thư viện ảnh có thể gây ra sự cố này. Nếu bạn kéo một hình ảnh từ máy tính của bạn vào trình mô phỏng và chọn nó. vấn đề này được giải quyết


5
2017-10-27 08:08



Cố gắng này, đã không làm việc. - Beau Nouvelle


Theo câu trả lời của Abdurohman, tôi thay đổi mã của tôi và giải quyết vấn đề, cảm ơn.

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
    let selectedImage = info[UIImagePickerControllerOriginalImage] as! UIImage

    photoImageView.image = selectedImage

    // Dismiss the picker.
    dismiss(animated: true, completion: nil)
}

3
2017-09-29 07:57



Đó là mã duy nhất làm việc cho tôi trong Swift 3.0. Cảm ơn! - fraxool


Thêm mục này vào viewDidload ()

imagepicker.delegate = self

2
2018-05-22 17:20





Thêm "_" vào các tham số hàm.

từ

func imagePickerController(picker: UIImagePickerController ...

đến

func imagePickerController(_ picker: UIImagePickerController ...

1
2017-09-21 07:24





Điều này làm việc cho tôi:

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
    if let image = info[UIImagePickerControllerOriginalImage] as? UIImage {
        imageView.image = image
        self.dismiss(animated: true, completion: nil)
    }
}

1
2017-09-30 23:58



Chào mừng bạn đến với Stack Overflow! Mã chỉ câu trả lời không phải là rất hữu ích của riêng mình. Nó sẽ giúp ích nếu bạn có thể thêm một số chi tiết giải thích cách thức / tại sao nó trả lời câu hỏi - Jeet