使用 NSTimer 时如何更改 userInfo 中的数据?
Posted
技术标签:
【中文标题】使用 NSTimer 时如何更改 userInfo 中的数据?【英文标题】:How to change data in the userInfo when using NSTimer? 【发布时间】:2015-06-04 13:35:15 【问题描述】:我使用 NSTimer 每 1 秒重复一个函数。我使用scheduledTimerWithTimeInterval
方法的userInfo
参数。我需要更新这个userInfo
中的数据。
override func viewDidLoad()
super.viewDidLoad()
NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: "minus:", userInfo: ["number": 100], repeats: true)
func minus(timer: NSTimer)
var userInfo = timer.userInfo as! Dictionary <String, Int>
println(userInfo["number"]!)
userInfo["number"] = userInfo["number"]! - 1
我希望打印的是 100 99 98 97。但是当代码运行时我得到 100 100 100 100。
函数minus
第一次运行时,我想我已经把userInfo的数据从100改成了99。但是minus
第二次运行时userInfo
的数据还是100。
如何更新userInfo
的数据?
谢谢。
【问题讨论】:
【参考方案1】:我很惊讶这不是构建错误/崩溃,因为 userInfo
是只读的。
您可以将其设为NSMutableDictionary
,这样您就不会更改userInfo
指针,您只是更改它指向的对象的内容,但我想说的是,您真的应该只使用实例变量。 ..
【讨论】:
【参考方案2】:您不能更改计时器中的 userInfo 对象。 userInfo 是一个只读属性。因此,显而易见的解决方法是将可变对象存储为 userInfo。例如 NSMutableDictionary* 或您自己的类。
但是,您从不可变的 NSDictionary 开始,然后将其转换为 Swift 字典。不要那样做。您需要直接访问存储的对象,即 NSMutableDictionary。
【讨论】:
以上是关于使用 NSTimer 时如何更改 userInfo 中的数据?的主要内容,如果未能解决你的问题,请参考以下文章
错误无法下标“AnyObject?”类型的值在 NSTimer 的 userInfo 中使用数组
NSTimer 中的 UserInfo 没有传递正确的信息 - Swift