我目前正在尝试将自定义 Swift 类保存到 NSUserDefaults。这是我的 Playground 中的代码:
import Foundation
class Blog : NSObject, NSCoding {
var blogName: String?
override init() {}
required init(coder aDecoder: NSCoder) {
if let blogName = aDecoder.decodeObjectForKey("blogName") as? String {
self.blogName = blogName
}
}
func encodeWithCoder(aCoder: NSCoder) {
if let blogName = self.blogName {
aCoder.encodeObject(blogName, forKey: "blogName")
}
}
}
var blog = Blog()
blog.blogName = "My Blog"
let ud = NSUserDefaults.standardUserDefaults()
ud.setObject(blog, forKey: "blog")
当我运行代码时,出现以下错误
Execution was interrupted, reason: signal SIGABRT.
在最后一行(ud.setObject
...)
在带有消息的应用程序中,相同的代码也会崩溃
"Property list invalid for format: 200 (property lists cannot contain objects of type 'CFType')"
有人可以帮忙吗?我在 Maverick 上使用 Xcode 6.0.1。谢谢。
最佳答案
在 Swift 4 或更高版本中,使用 Codable。
在您的情况下,请使用以下代码。
class Blog: Codable {
var blogName: String?
}
现在创建它的对象。例如:
var blog = Blog()
blog.blogName = "My Blog"
现在像这样编码:
if let encoded = try? JSONEncoder().encode(blog) {
UserDefaults.standard.set(encoded, forKey: "blog")
}
并像这样解码:
if let blogData = UserDefaults.standard.data(forKey: "blog"),
let blog = try? JSONDecoder().decode(Blog.self, from: blogData) {
}
关于swift - 使用 NSCoding 将自定义 Swift 类保存到 UserDefaults,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26469457/