簡體   English   中英

使用NSTimer時如何更改userInfo中的數據?

[英]How to change data in the userInfo when using NSTimer?

我使用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 9897。但是運行代碼時我會得到100 100 100 100。

minus號第一次運行時,我想我已經將userInfo的數據從100更改為99。但是當minus號第二次運行時, userInfo的數據仍然為100。

如何更新userInfo的數據?

謝謝。

我很驚訝這不是構建錯誤/崩潰,因為userInfo是只讀的。

您可以將其設置為NSMutableDictionary這樣就無需更改userInfo指針,而只是更改其指向的對象的內容,但是我想說的是,您實際上應該只使用實例變量...

您不能在計時器中更改userInfo對象。 userInfo是只讀屬性。 因此,顯而易見的解決方法是將可變對象存儲為userInfo。 例如NSMutableDictionary *或您自己的類。

但是,您從一成不變的NSDictionary開始,然后將其轉換為Swift字典。 不要那樣做 您需要直接訪問存儲的對象,即NSMutableDictionary。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM