【问题标题】:Swift2- NSTimer CrashingSwift2- NSTimer 崩溃
【发布时间】:2015-10-23 14:05:41
【问题描述】:

当我尝试使计时器变为动态时,它崩溃了。 添加如下代码让我知道我在哪里出错:

let defaults = NSUserDefaults.standardUserDefaults()
let tTimer = defaults.stringForKey("ThankYouTimer")
let doubleTimerValue:Double = NSString(string: tTimer!).doubleValue
NSTimer.scheduledTimerWithTimeInterval(doubleTimerValue, target: self, selector: "fireTimer", userInfo: nil, repeats: false)

提前致谢

【问题讨论】:

  • 那不是你的真实代码,是吗?如果是,tTimer 到底是什么?如果不是,请将其删除并显示真实代码。
  • 你能发布堆栈跟踪吗?
  • 还有异常文本。 “无法识别的选择器发送到实例”,毫无疑问......
  • @trojanfoe 那或tTimer 出乎意料地为零
  • tTimer 它的滑块值存储在 NSUserDefaults 中。

标签: ios crash double swift2 nstimer


【解决方案1】:
import XCPlayground
XCPlaygroundPage.currentPage.needsIndefiniteExecution = true
import Foundation

class C {
    func f() {
        print("job")
    }
}
let c = C()
NSTimer.scheduledTimerWithTimeInterval(1, target: c, selector: "f", userInfo: nil, repeats: false)
// 2015-11-06 09:22:55.261 Untitled Page[28568:1397919] *** NSForwarding: warning: object 0x7fd51352d190 of class '__lldb_expr_574.C' does not implement methodSignatureForSelector: -- trouble ahead Unrecognized selector -[__lldb_expr_574.C f]

如果你从 NSObject 继承 C

import XCPlayground
XCPlaygroundPage.currentPage.needsIndefiniteExecution = true
import Foundation

class C: NSObject {
    func f() {
        print("job")
    }
}
let c = C()
NSTimer.scheduledTimerWithTimeInterval(1, target: c, selector: "f", userInfo: nil, repeats: false)
// print "job" as expected

或者将你的函数定义为@objc

import XCPlayground
XCPlaygroundPage.currentPage.needsIndefiniteExecution = true
import Foundation

class C {
    @objc func f() {
        print("job")
    }
}
let c = C()
NSTimer.scheduledTimerWithTimeInterval(1, target: c, selector: "f", userInfo: nil, repeats: false)
// print "job" as expected

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-25
    • 1970-01-01
    • 1970-01-01
    • 2013-07-10
    • 2011-04-11
    • 2022-11-02
    • 1970-01-01
    相关资源
    最近更新 更多