Tôi hiện đang cố lưu một lớp Swift tùy chỉnh vào NSUserDefaults. Đây là mã từ Playground của tôi:Lưu lớp SWIFT tùy chỉnh bằng NSCoding thành UserDefaults
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")
Khi tôi chạy mã, tôi nhận được lỗi "Thực thi bị gián đoạn, lý do: tín hiệu SIGABRT". ở dòng cuối cùng (ud.setObject ...)
Cùng một mã cũng đổ vỡ khi trong ứng dụng có thông báo "Danh sách sản phẩm không hợp lệ cho định dạng: 200 (danh sách thuộc tính không thể chứa đối tượng thuộc loại 'CFType')"
Ai đó có thể giúp bạn? Tôi đang sử dụng Xcode 6.0.1 trên Maverick. Cảm ơn.
bạn nên đăng mã làm việc của mình làm câu trả lời, nhận câu trả lời duy nhất ở đây là câu trả lời chỉ liên kết được coi là nguyên tắc không trả lời theo nguyên tắc ngăn xếp chồng chéo. –
Có một hướng dẫn tốt ở đây: https://ios8programminginswift.wordpress.com/2014/08/17/persisting-data-with-nsuserdefaults/ Một thảo luận reddit tốt ở đây: http://www.reddit.com/r/ swift/comments/28sp3z/whats_the_best_way_to_achieve_persistence_in/Một bài đăng hay khác tại đây: http://www.myswiftjourney.me/2014/10/01/simple-persistent-storage-using-nsuserdefaults/ Để lưu trữ toàn bộ đối tượng, tôi khuyên bạn nên sử dụng NSCoding đầy đủ - hai ví dụ bên dưới, thứ hai từ tôi với cấu trúc lớp học đầy đủ: http://stackoverflow.com/questions/26233067/simple-persistent-storage-in-swift/26233274#26233274 http: // stackoverfl –
mã hoạt động được đăng bên dưới. – Georg