2012-01-11 1 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 ]; 

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

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

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

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

Благодаря РЕЗА

ответ

2

unarchiveObjectWithData

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

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

initForReadingWithData

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

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^