Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift NSKeyedArchiver&;NSKEYEDUNACHIVER取决于bundli ID 我有一个有两个目标的应用程序:App_TARGET1和App_TARGET2_Swift_Nskeyedarchiver_Targets - Fatal编程技术网

Swift NSKeyedArchiver&;NSKEYEDUNACHIVER取决于bundli ID 我有一个有两个目标的应用程序:App_TARGET1和App_TARGET2

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

我正在序列化我的APP_TARGET1中的一个对象并存储它(sqlite,文件)

  • 我正在用APP_TARGET2读回blob/文件,并尝试反序列化该对象

     let temp=NSKeyedUnarchiver.unarchiveObjectWithData(data!);
    
  • ->我得到以下错误,这表明序列化对象依赖于bundli id

    请有人告诉我,这不是真的,有一个变通方法可以让apps目标写入obejcts,另一个目标读取对象

    有什么帮助吗

    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提供数据对象

    问题不在于bundle id,问题在于类的编译方式不同,因为它们内置在不同的目标中

    您可以通过将委托添加到键控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?