18

NSCoderメソッドを使用できるかどうか疑問に思いました。

- (void)encodeObject:(id)objv forKey:(NSString *)key

NSArrayまたはNSDictionaryのインスタンスをエンコードします。そうでない場合は、どのようにエンコードしますか?NSKeyedArchived / NSKeyedUnarchiverを使用して、GameKitを使用して電話間でデータを送信しようとしています。試しましたが、配列に保存した文字列を取得できないようです。私が作成したパケットクラスは、パケットタイプ整数と一緒に通過しますが、配列内のデータではないようです。

前もって感謝します!

4

3 に答える 3

32

配列または辞書がルートオブジェクトである場合は、次のことを行う必要があります

NSData * encodedData = [NSKeyedArchiver archivedDataWithRootObject:someArray];

また

BOOL success = [NSKeyedArchiver archiveRootObject:someArray toFile:filePath];

カスタムクラスのインスタンス変数の場合、-encodeWithCoder:メソッドで実行する必要があります

[coder encodeObject:someArray forKey:@"someArray"];

そして、-initWithCoder:メソッドで

someArray = [[coder decodeObjectForKey:@"someArray"] retain];
于 2010-02-09T02:53:29.580 に答える
21

配列にはどのようなオブジェクトを格納していますか?配列に格納されているすべてのオブジェクトがNSCodingプロトコルを実装していることを確認してください。

于 2010-02-09T02:53:59.223 に答える
11

NSKeyedArchiver / Unarchiverは、NSArrayとNSDictionariesを問題なくエンコードおよびデコードする必要があります。作成したパケットクラスがNSCodingプロトコルを実装している場合は、メソッドを明示的に呼び出す必要があります(myNsArrayが、エンコードするパケットオブジェクトのインスタンス変数の名前であると想定しています)。ただし、アーカイバとNSArrayが残りの処理を行う必要があります。これを行う場合は、クラスのレイアウトと、エンコード/デコード時に誰が誰を呼び出しているかについて詳しく知ることが役立ちます。[encodeObject:myNsArrayforKey:@"stringsArray"]-encodeWithCoder:

于 2010-02-09T02:43:49.937 に答える