2016-08-10 19 views
0

にNSCodingを使用している間self.initコールエラーの前に使用「自己」私はNSKeyedArchiver.archivedDataWithRootObjectカスタムクラス

を使用して、それを保存することができますので、カスタムクラスをエンコードしようとしているが、私はNSCodingプロトコルに準拠しようとすると、 、私はこのエラーを受け取ります:self.initの前に使用される 'self'。ここに私のコードです:

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について怒っています。あなたが便利なイニシャライザを作成すると、それは "本物のイニシャライザにチェーンされます。

関連する問題