NSKeyedUnarchiver не работает должным образом - PullRequest
1 голос
/ 11 января 2012

Я столкнулся со странным поведением в NSKeyedUnarchiver.

Я архивирую данные, для этого примера я просто использую строку:

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

и затем я хочу разархивировать ее.если я использую

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

, я получаю нулевой результат, но если я использую:

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

, я получаю обратно свою строку.Теперь я подумал, что [NSKeyedUnarchiver unarchiveObjectWithData: myData] является просто вспомогательным методом для [[NSKeyedUnarchiver alloc] initForReadingWithData: myData], но, похоже, он не работает таким образом.Я не прав.

Спасибо, Реза

1 Ответ

2 голосов
/ 11 января 2012

unarchiveObjectWithData

Apple: «Декодирует и возвращает граф объектов, ранее закодированный NSKeyedArchiver и сохраненный в заданном объекте NSData.»

Это означает, что он разархивирует полный класс, а не готовится к разархивированию отдельных объектов.

initForReadingWithData

Apple: «Инициализирует приемник для декодирования архива, ранее закодированного NSKeyedArchiver.

Возвращает: объект NSKeyedUnarchiver, инициализированный для декодирования данных. "

Что означает просто инициализацию неархиватора, готового принимать вызовы неархивированного метода.

...