- IOS-App の 2 つのターゲットがあります: MYAPPTARGET_1 と MYAPPTARGET_2
- MYAPPTARGET_1 は NSKeyedArchiver を使用して Stream を BLOB に書き込んでいます
- MYAPPTARGET_2 は NSKeyedUnarchiver を使用して BLOB からストリームを読み取ります
MYAPPTARGET_2 で BLOB からストリームをアンアーカイブすると、次のエラーが発生します: 016-01-18 15:01:38.541 WorldHistoryAtlasTest[598:9405] * 例外がキャッチされていないためアプリを終了しています 'NSInvalidUnarchiveOperationException', reason: '* -[NSKeyedUnarchiver decodeObjectForKey:]: キー (rootobject) のクラス (MYAPPTARGET_1.MapTheme) のオブジェクトをデコードできません。
したがって、MYAPPTARGET_1 のプレフィックスで明らかにエンコードされているようで、MYAPPTARGET_2 からは読み取ることができません。
そのため、別の STACKOVERFLOW Answer でこれを克服するためのヒントを得て、デリゲート アンアーカイバーを使用してクラス名を上書きしました。しかし、私はこれを実装することができません:
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")
targetname MYAPPTARGET_1 のアプリがあり、NSKeyedArchiver 機能を使用して一部のデータを blob として保存します。
その後、MYAPPTARGET_2 という名前の 2 番目の Apps-Target を使用して、データを再度読み取ろうとします。DBに格納されたBLOBから読み込みます。
誰かがこれについて実用的なヒントをくれたらとてもうれしいです。