Swift NSKeyedArchiver&;NSKEYEDUNACHIVER取决于bundli ID 我有一个有两个目标的应用程序:App_TARGET1和App_TARGET2
我正在序列化我的APP_TARGET1中的一个对象并存储它(sqlite,文件)Swift NSKeyedArchiver&;NSKEYEDUNACHIVER取决于bundli ID 我有一个有两个目标的应用程序:App_TARGET1和App_TARGET2,swift,nskeyedarchiver,targets,Swift,Nskeyedarchiver,Targets,我正在序列化我的APP_TARGET1中的一个对象并存储它(sqlite,文件) 我正在用APP_TARGET2读回blob/文件,并尝试反序列化该对象 let temp=NSKeyedUnarchiver.unarchiveObjectWithData(data!); ->我得到以下错误,这表明序列化对象依赖于bundli id 请有人告诉我,这不是真的,有一个变通方法可以让apps目标写入obejcts,另一个目标读取对象 有什么帮助吗 NSKeyedUnarchiver.unar
let temp=NSKeyedUnarchiver.unarchiveObjectWithData(data!);
class BlobHandler: NSObject , NSKeyedUnarchiverDelegate{
let data:NSData? = NSData(bytes: point, length: Int(len));
//NSKeyedUnarchiver.set
var mykeyedunarchiver:NSKeyedUnarchiver=NSKeyedUnarchiver(forReadingWithData: data!);
mykeyedunarchiver.delegate = self;
let temp=mykeyedunarchiver.decodeObject();
。。。。
....
- 设置委托时,我不知道如何向unarchiver提供数据对象
optional func unarchiver(_ unarchiver: NSKeyedUnarchiver, cannotDecodeObjectOfClassName name: String, originalClasses classNames: [String]) -> AnyClass?
这样您就可以检查请求的类名,并在当前目标中返回相应的匹配类。感谢您帮助我找到正确的路径。(我接受了)我很高兴有一个解决方案,但我在实现它时遇到了问题。请你看看我最新的问题“尝试实施”。我想我仍然有一些理解上的问题。
可选
是函数定义的一部分,但不应该在您的实现中。首先,在委托方法中记录名称
,以便查看得到的结果。然后,您需要编写代码将这些名称转换为要返回的Class
实例(不是类的实例,只是类本身),我想,当调用委托时,我可以填充代码。(希望:-)但是我不知道如何用我的UnArchivever调用unarchiveObjectWithData(),因为我的MyKeyedUnachiver没有unarchiveObjectWithData方法。您需要使用init(用于读取WithData数据:NSData)
和decodeObject
谢谢。我找到了mykeyedarchiver.decodeObject()。但是mykeyedarchiver.init(不存在。如何设置NSData。我检查了上下文的所有方法,但没有找到。有什么帮助吗?
class BlobHandler: NSObject , NSKeyedUnarchiverDelegate{
let data:NSData? = NSData(bytes: point, length: Int(len));
//NSKeyedUnarchiver.set
var mykeyedunarchiver:NSKeyedUnarchiver=NSKeyedUnarchiver(forReadingWithData: data!);
mykeyedunarchiver.delegate = self;
let temp=mykeyedunarchiver.decodeObject();
func unarchiver(_ unarchiver: NSKeyedUnarchiver, cannotDecodeObjectOfClassName name: String, originalClasses classNames: [String]) -> AnyClass? {
print("I am in the delegated method !");
return nil;
}
optional func unarchiver(_ unarchiver: NSKeyedUnarchiver, cannotDecodeObjectOfClassName name: String, originalClasses classNames: [String]) -> AnyClass?