2017-02-11 6 views
0

は、アプリケーションが終了するたびにsaveuser()メソッドを使用しています。ユーザには、サブNSObjectClassesという2つのArraysがあります。ここに私のエンコード方法があります。NSCoderを使用したエンコードアレイ

func encode(with aCoder: NSCoder) { 
    aCoder.encode(self.firstName, forKey: coderKey.fName) 
    aCoder.encode(self.lastName, forKey: coderKey.lName) 
    aCoder.encode(self.bio, forKey: coderKey.bio) 
    aCoder.encode(self.tags, forKey: coderKey.tags) 
    aCoder.encode(self.organizations, forKey: coderKey.orgs) 
    aCoder.encode(self.img, forKey: coderKey.img) 
} 

アプリクラッシュself.tagsをコードします。私はself.organizationsでもarrayNSObjectsであり、おそらくself.imgであるので、UIImageであるので、同じことを行うと仮定します。ここに私が得ているエラーがあります。キャッチされない例外により 'NSInvalidArgumentException'、理由にアプリを終了

: - 私はこの問題を解決するために何をすべき

を '[Social_Justice.Tag encodeWithCoder::]認識されていないセレクタは、インスタンス0x60000005efc0に送られましたか'?これ以上コードを見る必要がある場合は、コメントして編集します。

+2

あなたの2つのカスタムクラスもNSCodingを実装する必要があります。 –

答えて

0

David Berryが元の投稿にコメントしました。エンコードしようとしているカスタムクラスもNSCoderに準拠していることを確認する必要があります。彼らはアーカイブパスを持つ必要はありません、彼らはエンコードとデコード機能を持つ必要があります。

0

回答:

  1. 私は配列self.tag とself.organization の内側にオブジェクトのクラス名を想定しタグ組織

  2. です
  3. Objective-Cは、非常に異なる関数呼び出しスタイルを使用します。 SwiftのObjectName.function()スタイルに相当する[ClassName/ObjectName methodName]が表示されている場合は、このようにしておきましょう(Swiftコンパイラは将来的には改善されます)、

  4. はobjctive-C警告が表示されなくなります。
  5. セレクタはObjective-Cで使用される用語ですが、これはメソッドであると考えることができます。したがって、この認識できないセレクタエラー警告は、オブジェクト内に実際には存在しないencodeWithCode()という名前のメソッドを呼び出そうとしました。タグおよび組織(NSCoderシステムは配列のエンコード方法を知っていますが、アレイ内の独自のオブジェクト)

  6. あなたがオブジェクト上NSCoderシステムの5つの具象クラスを使用する場合は、オブジェクトMUSTNSCodingプロトコルに準拠しています。それはNSCoderの4つの具体的なクラスがありinit?(coder: NSCoder)func encode(with: NSCoder)

  7. 実装しなければならないクラス(タグ組織)を意味NSArchiver, NSUnarchiver, NSKeyedArchiver, NSKeyedUnarchiver, and NSPortCoder.

参考資料:

NSCoding/NSKeyed​Archiver By NSHipster

または:(私のお気に入り)

Apple Document NSKeyedArchiver

Apple Document NSCoding

それとも

Apple Document NSCoder:(それらの文書が残っている場合はビットがあなたのために混乱)

Hollemans M. 2016、iOS Apprentice第5版チュートリアル2チェックリスト、pp 126〜pp 137

関連する問題