1

私は NSMutableArray と NSString を持っています。これらをアーカイブし、配列と文字列内のデータを変更せずに配列と文字列を取得したいと考えています。

私はこのように与えました、

アーカイブ用、

NSMutableData *data = [[NSMutableData alloc]init];
                        NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];
                        [archiver encodeObject:arrayRandomNumberForUser forKey:@"array"];
                        [archiver encodeObject:stringBingo forKey:@"string"];
                        [archiver finishEncoding];

アンアーカイブのために、

NSData *data=match.matchData;
    NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];
    mutableArray = [unarchiver decodeObjectForKey:@"array"];
    stringtakenValue = [unarchiver decodeObjectForKey:@"string"];
    [unarchiver finishDecoding];

ここで、match.matchData は、 gamecenterのテイク ターン メソッドから取得する NSData オブジェクトです。

take turnMethod を呼び出すと、クラッシュします。コンソール ウィンドウのエラー メッセージを次に示します。

キャッチされない例外 'NSInvalidArgumentException' が原因でアプリを終了しています。理由: '-[NSXPCEncoder encodeObject:forKey:]: このコーダーは、NSSecureCoding を採用するオブジェクトのみをエンコードします (オブジェクトはクラス 'NSKeyedArchiver' です)。

4

1 に答える 1

0

よくわかりませんが、unarchiver は NSMutableArray ではなく NSArray を返すと思います。だから試してみてください

mutableArray = [[unarchiver decodeObjectForKey:@"array"] mutableCopy];
于 2013-05-14T23:00:13.530 に答える