获取错误无法转换类型' NSTaggedPointerString'的值到了NSArray'

时间:2016-05-11 09:17:15

标签: ios swift

我是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
    }

}

1 个答案:

答案 0 :(得分:0)

正确使用NSUserdefaults获取对象。问题可能出在您设置数据的位置。

as! [String]
函数getAllTimes中的

执行强制转换,它会将您获得的任何对象转换为String数组。如果无法对该对象进行转换(因为您插入了其他类型),则会失败。

所以意思是,如果你将一个String数组保存到NSUserdefaults,这将成功。

确保您应该显示保存到NSUserDefaults的代码。