【发布时间】:2021-08-26 07:33:59
【问题描述】:
我正在使用 Xcode 12 和 Swift 5 环境来构建 iOS 应用程序。
我需要在视图消失之前(或在应用程序关闭之前)存储一个 OpaquePointer 类型变量(以下代码中的“self.loggers”),并在视图出现时(当应用程序运行时)检索它。 我尝试如下使用 UserDefault,
// Storing(In viewWillDisappear)
do {
encodedData = try NSKeyedArchiver.archivedData(withRootObject: self.loggers, requiringSecureCoding: false)
UserDefaults.standard.set(encodedData, forKey: "accelLoggerID")
} catch {
print("archiving error")
}
...
// Retrieving(In viewDidLoad)
if let decodedData = UserDefaults.standard.object(forKey: "acceleration") as? Data {
do {
self.loggers = try NSKeyedUnarchiver.unarchiveTopLevelObjectWithData(decodedData) as? [String:OpaquePointer] ?? [:]} catch {
print("unarchiving error")
}
} else {
self.loggers = [:]
print("No value in Userdefault. [viewDidLoad]")
}
但是,NSKeyedArchiver 未能对此类类型进行编码。之后,我做了一个包装变量的类。
class LoggerWrapper {
var loggers: [String : OpaquePointer]
init(loggerDic: [String : OpaquePointer]) {
loggers = loggerDic
}
}
并更改了我的代码
self.loggers = try NSKeyedUnarchiver.unarchiveTopLevelObjectWithData(decodedData) as? LoggerWrapper ?? LoggerWrapper(loggerDic: [:])} catch {
print("unarchiving error")
}
但是,当调用 NSKeyedArchiver.archivedData 时,这会给出 SIGABRT。 有没有办法在 UserDefaults 中存储 Opaquepointer 类型?如果没有,使用核心数据可以解决这个问题吗?
谢谢。
【问题讨论】:
-
文档对
OpaquePointer有什么看法?
标签: ios swift nskeyedarchiver userdefaults opaque-pointers