imagePickerController: didFinishPickingMediaWithInfo конфликтует с дополнительным методом требований в протоколе UIImagePickerControllerDelegate

Вот полная ошибка:

Метод Objective-C 'imagePickerController: didFinishPickingMediaWithInfo:' предоставлен методом 'imagePickerController (_: didFinishPickingMediaWithInfo :)' конфликтует с дополнительным методом требований 'imagePickerController (_: didFinishPickingMediaWithInfo :)' в протоколе 'UIImage

Это происходит при первой из этой функции в моем файле ViewController.swift:

func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [NSObject : AnyObject]){
    if let pickedImage = info[UIImagePickerControllerOriginalImage] as? UIImage {
        ImageView.contentMode = .ScaleAspectFit
        ImageView.image = pickedImage
    }

    dismissViewControllerAnimated(true, completion: nil)
}

Я пытаюсь следовать этому руководству: http://www.codingexplorer.com/choosing-images-with-uiimagepickercontroller-in-swift/.

из метода ошибки я понимаю, что существует метод didFinishPickingMediaWithInfo, который он получает из базового класса imagePickerController, и мне не нравится, что я пытаюсь его перезаписать. Но это все, что я знаю. Все функции imagePickerController, которые я нахожу в Интернете, выглядят следующим образом. Что я делаю неправильно?

Я использую Xcode 7, если это имеет значение. ]

Снимок экрана 1


person BigBoy1337    schedule 19.07.2015    source источник


Ответы (4)


Правильная функциональная глава:

func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) {
    <#code#>
}

Обратите внимание на String вместо NSObject в объявлении информационного словаря.

Я не уверен, почему в документации говорится, что вы должны написать NSObject, но String - правильный вариант.

Если вы реализуете какие-либо методы протокола, я бы рекомендовал использовать автоматическое завершение Xcode, чтобы убедиться, что вы не столкнетесь с такими проблемами.

введите описание изображения здесь

Я не уверен, откуда Xcode получает это автоматическое завершение, но похоже, что он всегда синхронизируется с фактическим компилятором, что, в конце концов, является единственной вещью, о которой вам нужно беспокоиться, а не некоторыми онлайн-документами Apple! Особенно в то время, когда фреймворки постоянно меняются и даже сам язык находится в стадии разработки.

person luk2302    schedule 19.07.2015
comment
Ваш ответ устранил мою проблему, хотя автозаполнение XCode 8 вызвало ее, поэтому автозаполнение также может быть неправильным. Мой ответ ниже - person n13; 16.11.2016
comment
Swift 3: 'func imagePickerController (_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String: Any]) {' - person Sean Dev; 17.05.2017

Если вы используете Xcode 7, вы можете ориентироваться на iOS 9, в которой сигнатура метода немного изменилась с:

func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [NSObject : AnyObject]) {

to:

func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) {

NSObject изменился на String.

В Swift 3 он изменился на

func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any])
person Andrew M    schedule 19.07.2015

Ниже представлен формат делегата didFinishPickingMediaWithInfo UIImagePickerController:

 public func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject])

В вашем случае используйте String вместо NSObject в параметре функции.

Снимок экрана 1

person Jayprakash Dubey    schedule 08.09.2016

У меня возникла проблема с написанием расширения для UIImagePickerControllerDelegate в XCode 8

XCode 8 Autocomplete создает сигнатуру метода с подчеркиванием для первого параметра. Это создает ошибку сегментации в компиляторе Swift. Удаление подчеркивания устраняет проблему.

// CRASH SegFault 11
@objc protocol MyDelegate: UIImagePickerControllerDelegate {

}
extension MyDelegate {
    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
        // code
    }
}


// DOESN'T CRASH 
@objc protocol MyDelegate: UIImagePickerControllerDelegate {

}

extension MyDelegate {
    func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
        // code
    }
}
person n13    schedule 16.11.2016