2012-01-11 14 views
1

NSKeyedUnarchiverで奇妙な動作が発生しました。NSKeyedUnarchiverが期待どおりに動作しない

NSMutableData  *myData = [ NSMutableData data ]; 
NSKeyedArchiver  *archiver = [[ NSKeyedArchiver alloc ] initForWritingWithMutableData:myData ]; 
NSString   *testString = [ NSString stringWithString:@"Hello World!" ]; 
[ archiver encodeObject:testString forKey:@"test" ]; 
[ archiver finishEncoding ]; 

、その後、私はそれをアーカイブ解除したい:

私はこの例のために、私は単なる文字列を使用して、データをアーカイブします。私は私がnil結果を得るが、私が使用している場合

を使用する場合:

NSKeyedUnarchiver *unarchiver = [[ NSKeyedUnarchiver alloc ] initForReadingWithData:myData ]; 
NSString  *result = [ unarchiver decodeObjectForKey:@"test" ]; 

私は戻って私の文字列を取得します。今、私は[NSKeyedUnarchiver unarchiveObjectWithData:myData]は[[NSKeyedUnarchiver alloc] initForReadingWithData:myData]の便利なメソッドだと思っていますが、そのように振舞うようには見えません。私が間違っている。

おかげレザ

答えて

2

unarchiveObjectWithData

アップル:「デコードしては、予め与えられたNSDataオブジェクトにNSKeyedArchiverによってコードされ、格納されたオブジェクトグラフを返します。」

これは、個々のオブジェクトのアーカイブを準備するのではなく、完全なクラスをアーカイブ解除することを意味します。

initForReadingWithData

アップル:「以前NSKeyedArchiverによってコードアーカイブを復号するための受信機を初期化し

戻り値:デコードデータのために初期化NSKeyedUnarchiverオブジェクトを」

これは、アーカイブ解除メソッド呼び出しを受け入れる準備ができたアンアーカイバを単に初期化することを意味します。