1

我正在更新一个使用“NSKeyedUnarchiver unarchiveObjectWithData”的旧目标 C 应用程序,该应用程序现已弃用。该应用程序归档一个由自定义对象组成的数组,其中包含(除其他外)另一个不同自定义对象的数组。我在 2 个对象的 .h 文件中实现了 NSSecureCoding,并在两个 .m 文件中添加了“+ (BOOL)supportsSecureCoding”覆盖。

我更新的归档代码可以与旧的不推荐使用的 NSKeyedUnarchiver unarchiveObjectWithData 方法一起正常工作:

        NSData *data = [NSKeyedArchiver archivedDataWithRootObject:self.myArray
                                             requiringSecureCoding:YES
                                                             error:&error];
        BOOL success = [data writeToFile:pathToArchiveFile
                                 options:NSDataWritingAtomic
                                   error:&error];

但是,使用我更新的未归档代码时出现错误

        NSData *data = [NSData dataWithContentsOfFile: pathToArchiveFile
                                              options:NSDataReadingMappedIfSafe
                                                error:&error];
        self.myArray = [NSKeyedUnarchiver unarchivedObjectOfClass:[NSArray class]
                                                          fromData:data
                                                             error:&error];

错误是 ..."value for key 'NS.objects' was of unexpected class 'MyClass... Allowed classes are '{( "NSArray...

如果我更改为unarchivedObjectOfClass:[MyClass class]错误是..."value for key 'root' was of unexpected class 'NSArray...Allowed classes are '{( "MyClass...

取消归档包含自定义类的数组时出了点问题,但我不知道如何修复它,并且可用的文档非常薄弱。我假设存档代码是正确的,因为不推荐使用的 unArchive 方法似乎可以正常使用它。

4

0 回答 0