我是swift的新手,我尝试创建一个闹钟,但是收到错误。 我可以像下面的代码一样使用NSUserDefaults,我该如何解决这个错误?
我得到的错误是:
Could not cast value of type 'NSTaggedPointerString' to 'NSArray'
并出现在这一行:
let alarms = defaults.objectForKey("Alarms") as! [String]
全班同学:
class Alarm {
// MARK: - Declare 2 fields just time and switch in alarm
var time: String = ""
var stateSwitch: Bool = false
// MARK: - Initalize
init(time: String , turnOn: Bool) {
self.time = time
self.stateSwitch = turnOn
}
class func getAllAlarm() -> [Alarm] {
var alarms = [Alarm]()
let times = getAllTimes()
let stateSwitchs = getAllSwitchs()
for i in 0...times.count {
let alarm = Alarm(time: times[i], turnOn: stateSwitchs[i])
alarms.append(alarm)
}
return alarms
}
private class func getAllTimes() -> [String]{
let defaults = NSUserDefaults.standardUserDefaults()
let alarms = defaults.objectForKey("Alarms") as! [String]
return alarms
}
private class func getAllSwitchs() -> [Bool]{
let defaults = NSUserDefaults.standardUserDefaults()
let stateSwitchs = defaults.objectForKey("Switchs") as! [Bool]
return stateSwitchs
}
}
答案 0 :(得分:0)
正确使用NSUserdefaults
获取对象。问题可能出在您设置数据的位置。
as! [String]
函数getAllTimes
中的执行强制转换,它会将您获得的任何对象转换为String
数组。如果无法对该对象进行转换(因为您插入了其他类型),则会失败。
所以意思是,如果你将一个String数组保存到NSUserdefaults
,这将成功。
确保您应该显示保存到NSUserDefaults的代码。