【发布时间】:2016-09-29 16:18:46
【问题描述】:
我有我的自定义类:
private class PendingRequest : NSObject, NSCoding
{
var route : String!
var params: [String: AnyObject]!
init(route: String, params: [String: AnyObject])
{
self.route = route
self.params = params
}
required init(coder aDecoder: NSCoder)
{
self.route = aDecoder.decodeObject(forKey: "route") as! String
self.params = aDecoder.decodeObject(forKey: "params") as! [String: AnyObject]
}
public func encode(with coder: NSCoder)
{
coder.encode(route, forKey: "route")
coder.encode(params, forKey: "params")
}
}
这是我保存PendingRequest列表的方法:
private static func savePendingRequests(requestsToSend: [PendingRequest])
{
let data = NSKeyedArchiver.archivedData(withRootObject: requestsToSend!)
UserDefaults.standard.set(data, forKey: self.requestsToSendDefaultsString)
}
这是我尝试检索它的方法:
let data = UserDefaults.standard.data(forKey: requestsToSendDefaultsString)
let requests = NSKeyedUnarchiver.unarchiveObject(with: data!) as! [PendingRequest]
return requests
但是在检索我的数据时我的代码崩溃了...保存工作正常,但无法检索...有什么想法吗?
编辑:这是我的Crashlytics 错误:
*** -[NSKeyedUnarchiver decodeObjectForKey:]: cannot decode object of class (_TtCC6Versus9VersusAPIP33_8D2B8AA415FDC4F8DFAF29D7ECE33C1F14PendingRequest) for key (NS.objects); the class may be defined in source code or a library that is not linked
解决方案:
我的班级PendingRequest 是fileprivate,因此NSKeyedUnarchiver 无法访问它,因此崩溃了...感谢您的帮助。
【问题讨论】:
-
能否添加崩溃日志表示调试控制台中正在打印的错误。
-
考虑
AnyObject已更改为Any,相当于 Objective-C 的id -
@NiravD 就是这样,我在控制台中没有打印任何内容...
-
编辑:使用 Crashlytics,我设法获得了一些信息...请参阅我对原始帖子的编辑。
标签: swift nsuserdefaults nscoding