2016-06-20 6 views
9

Я видел несколько вопросов, похожих на мои; тем не менее, они относятся к быстрой 2/1, и в настоящее время я использую быстрый 3. Я считаю, что Apple немного изменила его.Не соответствует протоколу «NSCoding» - Swift 3

class Person: NSObject, NSCoding { 

    var signature: UIImage 

    init(signature: UIImage) { 
     self.signature = signature 
    } 

    required convenience init(coder aDecoder: NSCoder) { 
     let signature = aDecoder.decodeObject(forKey: "signature") as! UIImage 
     self.init(signature: signature) 
    } 

    func encodeWithCoder(aCoder: NSCoder) { 
     aCoder.encode(signature, forKey: "signature") 
    } 

} 

Вы заметите, как Swift 3 в настоящее время заставляет меня использовать required convenience init( вместо required init(. Возможно, это как-то связано с этим.

Как решить эту проблему? Благодаря!

+0

Вы попробовали «Изменить -> Преобразовать -> В текущий быстрый синтаксис» в Xcode? Это должно устранить проблему автоматически. –

ответ

33

Метод encode в Swift 3 был переименован в

func encode(with aCoder: NSCoder) 

Когда вы получаете не соответствуют ошибки вы можете легко узнать, какие необходимые методы отсутствуют

  • Нажмите ⌘ B для создания кода.
  • Нажмите ⌘4, чтобы показать проблему навигатора.
  • Нажмите на раскрывающийся треугольник перед линией выпуска.
+0

Работает отлично. Я соглашусь через 6 минут, как только я позволю мне сделать это :) – penatheboss

+0

Я могу поверить, что я потратил впустую свои 2 драгоценных дня только для этого .. Ненавижу вас быстро для такого изменения .. и любите вы, братья, чтобы спасти мою задницу. :) Спасибо lotttt –