您可以
unarchiveTopLevelObjectWithData(_:)用来取消归档由归档的数据
archivedData(withRootObject:requiringSecureCoding:)。(我相信现在还不建议使用。)
但是在显示一些代码之前,您最好:
避免使用
NSData
,Data
改用避免使用
try?
可用于调试的错误信息删除所有不需要的演员表
试试这个:
private static func archiveWidgetDataArray(widgetDataArray : [WidgetData]) -> Data { do { let data = try NSKeyedArchiver.archivedData(withRootObject: widgetDataArray, requiringSecureCoding: false) return data } catch { fatalError("Can't enpre data: (error)") }}static func loadWidgetDataArray() -> [WidgetData]? { guard isKeyPresentInUserDefaults(key: USER_DEFAULTS_KEY_WIDGET_DATA), //<- Do you really need this line? let unarchivedObject = UserDefaults.standard.data(forKey: USER_DEFAULTS_KEY_WIDGET_DATA) else { return nil } do { guard let array = try NSKeyedUnarchiver.unarchiveTopLevelObjectWithData(unarchivedObject) as? [WidgetData] else { fatalError("loadWidgetDataArray - Can't get Array") } return array } catch { fatalError("loadWidgetDataArray - Can't enpre data: (error)") }}
但是,如果您要制作新的应用,则最好考虑使用
Codable。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)