2013-09-19 3 views
3

Значение архивов отличается прошивкой 6 и 7 прошивкой, когда архив MyDTO.
Почему это происходит?Значение архивов отличается прошивкой 6 и прошивкой 7

MyDTO.h

@property (nonatomic, strong) NSString *aaa; 
@property (nonatomic, strong) NSString *bbb; 

MyDTO.m

- (void)encodeWithCoder:(NSCoder *)encoder 
{ 
    [encoder encodeObject:_aaa forKey:@"aaa"]; 
    [encoder encodeObject:_bbb forKey:@"bbb"]; 
} 

MyMethod

- (void)test { 
    MyDTO *myDTO = [[MyDTO alloc] init]; 
    myDTO.aaa = @"1"; 
    myDTO.bbb = @"2"; 

    //data is different in iOS 6 and iOS 7 
    NSData *data = [NSKeyedArchiver archivedDataWithRootObject:myDTO]; 
} 

Редактировать

Ошибка происходит в следующих шагах.

  1. Архив DTO (IOS 6)
  2. До версии ОС (IOS 6 -> IOS 7)
  3. разархивировать из DTO (IOS 7) < - Ошибка!

Error Log

[NSKeyedUnarchiver initForReadingWithData:]: incomprehensible archive (0x48, 0xfffffff2, 0xffffffd7, 0xffffff89, 0xffffff80, 0xffffffa8, 0x70, 0xffffff8d) 

Normal в следующих шагах.

  1. Архив DTO (IOS 6)
  2. разархивировать из DTO (IOS 6)

ИЛИ

  1. Архив DTO (IOS 7)
  2. Dearive of DTO (iOS 7)

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

+0

Формат, вероятно, был изменен в iOS 7. [Он должен быть совместим] (http://stackoverflow.com/questions/16538581/nskeyedarchiver-nskeyedunarchiver-compatibility-on-different-ios-versions) – Petesh

+0

Я архивирую MyDTO в iOS 6. Теперь моя ОС - iOS7. Я не могу разблокировать MyDTO. Есть ли решение? –

+0

Вы тестируете на реальных устройствах? Я был успешной архивация и dearchiving на 6,1 -> 7,0 (32bit, 64bit), и когда я скопировал данные обратно в систему 6.1 для этого простого объекта, он работал отлично – Petesh

ответ

0

Вы можете перенести строку JSON вместо NSData и добавить методы для инициализации DTO из JSON, а также для создания JSON из вашего DTO. Я использую этот подход для обмена данными через Bluetooth Low Energy, и он отлично работает между устройствами iOS 7 и iOS 8.

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