2016-08-10 3 views
0

Я пытаюсь кодировать пользовательский класс, так что я могу сохранить его с помощью NSKeyedArchiver.archivedDataWithRootObject«я» используется до ошибки self.init вызова при использовании NSCoding на пользовательском классе

, но когда я пытаюсь соответствовать протоколу NSCoding , Я получаю эту ошибку: «self» используется до self.init. Вот мой код:

class MemberRewardsInfo: NSObject, NSCoding { 
var id: Int? 


    required convenience init?(coder aDecoder: NSCoder) { 

    guard let unarchivedId = aDecoder.decodeObjectForKey("id") as? Int 

     else { 
     return nil 
     } 
    } 


    func encodeWithCoder(aCoder: NSCoder) { 

    aCoder.encodeObject(id, forKey: "id") 
    } 
} 

его довольно раздражает, не уверен, почему он не работает.

ответ

0

Сообщение об ошибке является вводящим в заблуждение, но вы должны сделать init(coder:) назначенным инициализатором.

Вы должны изменить свой init(code:) к чему-то вроде этого:

required init?(coder aDecoder: NSCoder) { 
    guard let unarchivedId = aDecoder.decodeObjectForKey("id") as? Int else { 
      return nil 
    } 
    self.id = unarchivedId 
    super.init() 
} 
0

Видимо это расстроена convenience. Предполагается, что если вы создадите инициализатор удобства, он будет привязан к «реальному инициализатору».