未归档对象数据时遇到的问题

问题描述 投票:1回答:1

我为generic functionNSKeyedArchiver创建了NSKeyedUnarchiver。我能够存档数组数据,但是在进行非存档操作时会遇到问题。下面是我的代码:

NSKeyedArchiver代码:

func cacheData<T>(data: T) {        
        do {
            let codedData = try NSKeyedArchiver.archivedData(withRootObject: data, requiringSecureCoding: false)
        } catch {
            print("Exception while caching data \(error)")
        }
    }

NSKeyedUnarchiver代码:

func getCacheData<T>(encodedData: Data, ofClass: T.Type) -> [T]? {
    do{
        if let decodedData = try NSKeyedUnarchiver.unarchivedObject(ofClasses: [NSArray.self, T.self as! AnyClass], from: encodedData){
            return decodedData as? [T]
        }
    } catch {
        print("Exception while decode array cache data \(error)")
    }
    return nil
}

以上代码仅适用于stringsintegers变量,但效果很好,但如果具有custom classes变量,则失败。如何在NSKeyedUnarchiver中允许这些自定义类。

我遇到错误:

解码数组缓存数据时出错,错误Domain = NSCocoaErrorDomain代码= 4864“键'customclass1'的值为意外的类'CustomClass1'。允许的类别为'{(NSArray,MainClass)}'。“” UserInfo = {NSDebugDescription =键'customclass2'的值是意外类'CustomClass2'。允许的类是'{(NSArray,MainClass)}'。}

任何想法如何解决这个问题?

ios arrays swift nskeyedarchiver nskeyedunarchiver
1个回答
-1
投票

请确保您所有的班级都在向NSCoding确认。像这样的东西:

struct Class1 : NSCoding {
    let objects : [Class2]
    let text : String
}

struct Class2 : NSCoding {
    let value : String
}
© www.soinside.com 2019 - 2024. All rights reserved.