NSCoderメソッドを使用できるかどうか疑問に思いました。
- (void)encodeObject:(id)objv forKey:(NSString *)key
nSArrayまたはNSDictionaryのインスタンスをエンコードします。そうでない場合は、どのようにエンコードしますか? NSKeyedArchived/NSKeyedUnarchiverを使用して、GameKitを使用して電話間でデータを送信しようとしています。試しましたが、配列に保存した文字列を取得できないようです。私が作成したパケットクラスは、パケットタイプ整数と一緒に渡されますが、配列内のデータではないようです。
前もって感謝します!
NSKeyedArchiver/Unarchiverは、NSArrayとNSDictionariesを問題なくエンコードおよびデコードする必要があります。作成したパケットクラスがNSCodingプロトコルを実装している場合は、[encodeObject:
メソッドでforKey:@"stringsArray"]
myNsArray
-encodeWithCoder:
を明示的に呼び出す必要があります( myNsArrayが、エンコードするパケットオブジェクトのインスタンス変数の名前であると想定します)。ただし、アーカイバとNSArrayが残りの処理を行う必要があります。これを行う場合は、クラスのレイアウトと、エンコード/デコード時に誰が誰を呼び出しているかについて詳しく聞くと役立ちます。
配列または辞書がルートオブジェクトである場合は、次のことを行う必要があります
NSData * encodedData = [NSKeyedArchiver archivedDataWithRootObject:someArray];
または
BOOL success = [NSKeyedArchiver archiveRootObject:someArray toFile:filePath];
カスタムクラスのインスタンス変数の場合は、-encodeWithCoder:
メソッドは行う必要があります
[coder encodeObject:someArray forKey:@"someArray"];
そして-initWithCoder:
方法
someArray = [[coder decodeObjectForKey:@"someArray"] retain];
配列にはどのようなオブジェクトを格納していますか?配列に格納されているすべてのオブジェクトがNSCodingプロトコルを実装していることを確認してください。