2016-01-18 5 views
0
  • У меня есть 2 Цели моего IOS-App: MYAPPTARGET_1 & MYAPPTARGET_2
  • MYAPPTARGET_1 пишет поток к BLOB с использованием NSKeyedArchiver
  • MYAPPTARGET_2 читает поток из BLOB с помощью NSKeyedUnarchiver

Когда unarchiving Stream из BLOB в моем MYAPPTARGET_2, я получаю сообщение об ошибке: 016-01-18 15: 01: 38.541 WorldHistoryAtlasTest [598: 9405] * Завершение приложения из-за неотображенного исключения «NSInvalidUnarchiveOperationException», Причина: '* - [NSKeyedUnarchiver decodeObjectForKey:]: не может декодировать объект класса (MYAPPTARGET_1.MapTheme) для ключа (rootobject);Как реализовать делегат unarchiver для перезаписи имени класса?

Таким образом, он, очевидно, кодируется префиксом MYAPPTARGET_1 и не читается с MYAPPTARGET_2.

Итак, я получил подсказку для преодоления этого в другом STACKOVERFLOW. Ответьте на использование делегата unarchiver для перезаписывания имени класса. Но я не в состоянии осуществить это:

func unarchiver(unarchiver: NSKeyedUnarchiver, cannotDecodeObjectOfClassName name: String, originalClasses classNames: [String]) -> AnyClass? { 
    print("ClassName is " + name); 
    return nil; // WHAT TO DO , TO OVERWRITE THE CLASS NAME. 
} 

var mykeyedunarchiver:NSKeyedUnarchiver=NSKeyedUnarchiver(forReadingWithData: data!); 
mykeyedunarchiver.delegate = self; 
let temp=mykeyedunarchiver.decodeObjectForKey("rootobject") 

У меня есть приложение с Имя_целевого_объектом MYAPPTARGET_1 и хранить некоторые данные сгустка с помощью функции NSKeyedArchiver.

Затем со второй целью приложения с именем MYAPPTARGET_2 я снова пытаюсь прочитать данные. Загрузка из BLOB, хранящегося в БД.

Я был бы так счастлив, если бы кто-нибудь мог дать мне практический намек на это.

ответ

0

следующее достаточно:

class MyObject: NSObject, NSCoding {...} 
let my = MyObject() 

// archive 
NSKeyedArchiver.setClassName("MyObject", for: MyObject.self) 
let data = NSKeyedArchiver.archivedData(withRootObject: r) 

// unarchive 
NSKeyedUnarchiver.setClass(MyObject.self, forClassName: "MyObject") 
let _ = NSKeyedUnarchiver.unarchiveObject(with: data) 

это помогло мне обменивать пользовательские объекты между Mac-приложения и приложения iPhone