我尝试存储对象数组NSUserDefaults.
我有以下代码片段:
var accounts = MyAccounts()
var array:Array<MyAccounts.MyCalendar> = accounts.populateFromCalendars()
NSUserDefaults.standardUserDefaults().
setObject(array, forKey: "test_storeAccounts_array") // <- get error here
NSUserDefaults.standardUserDefaults().synchronize()
Run Code Online (Sandbox Code Playgroud)
但是我得到了例外:
does not implement methodSignatureForSelector: -- trouble ahead
Run Code Online (Sandbox Code Playgroud)
我的班级结构:
class MyAccounts {
/* ... */
class MyCalendar {
var title:String?
var identifier:String?
var email:String?
var calType:String?
var isActive:Bool?
var isMainAcount:Bool?
init(){}
}
}
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
mah*_*ega 80
确保您的类继承自NSObject
class MyAccounts:NSObject {
/* ... */
class MyCalendar {
var title:String?
var identifier:String?
var email:String?
var calType:String?
var isActive:Bool?
var isMainAcount:Bool?
init(){}
}
}
Run Code Online (Sandbox Code Playgroud)
Him*_*jan 16
我在Swift 3.0中遇到了这个异常.在我的例子中,我的模型类不是从NSObject基类继承的.只是从NSObject基类继承我的类并实现NSCoding协议(如果你的容器数组有自定义对象)
class Stock: NSObject, NSCoding {
var stockName: String?
override init() {
}
//MARK: NSCoding protocol methods
func encode(with aCoder: NSCoder){
aCoder.encode(self.stockName, forKey: "name")
}
required init(coder decoder: NSCoder) {
if let name = decoder.decodeObject(forKey: "name") as? String{
self.stockName = name
}
}
func getStockDataFromDict(stockDict stockDict:[String:AnyObject]) -> Stock {
if let stockName = stockDict["name"] {
self.stockName = stockName as? String
}
return self
}
}
Run Code Online (Sandbox Code Playgroud)
您需要将类转换为NSData第一个。像这样的东西:
var data = NSKeyedArchiver.archivedDataWithRootObject(accounts.populateFromCalendars())
var userDefaults = NSUserDefaults.standardUserDefaults();
userDefaults.setObject(data, forKey: "test_storeAccounts_array");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
22602 次 |
| 最近记录: |