gpt4 book ai didi

ios - Swift NSTimer 无法识别的选择器发送到实例 timerFireMethod

转载 作者:搜寻专家 更新时间:2023-10-31 22:47:13 32 4
gpt4 key购买 nike

我正在用 Swift 为 iOS 9.2 编写一些计时器代码我通过 xcode 下载了最新的 iOS 9.2 文档他们展示

(void)timerFireMethod:(NSTimer *)timer

但这行不通。如果我使用这样的签名

func timerFire(timer : NSTimer?)
func timerFire(timer : NSTimer)

然后我得到错误

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[DSP1.PlayManager timerFire]: unrecognized selector sent to instance

我唯一能开始工作的就是像这样的调用签名

func play(sound : String)
{
bsound = theLM?.getPlayer(sound)
bsound?.delegate = self
bsound?.play()
stimer = NSTimer(timeInterval: 1.0, target: self, selector: Selector("timerFire"), userInfo: self, repeats: true)
NSRunLoop.currentRunLoop().addTimer(stimer!, forMode: NSDefaultRunLoopMode)
}

// Docs say signature should be (void)timerFireMethod:(NSTimer *)timer. Docs are wrong
func timerFire()
{
print("Player at: \(bsound?.currentTime) out of \(bsound?.duration) seconds");
}

但这与通过 XCode 下载的最新 iOS 9.2 文档所说的不相符。

  • 我这样做对吗?
  • 为什么新加载的 iOS 9.2 文档似乎有错误的签名?
  • 其他人在阅读哪些有关 Swift iOS 编程的准确文档?

(编辑后更清楚文档中列出的回调签名在运行时无法工作)

回答:

在对 NSTimer 的调用中,如果作为 Selector 传入的函数名称有尾随冒号,则意味着您希望将计时器作为参数传递给您的方法。没有冒号意味着您不想将计时器作为参数传递。

NSTimer(timeInterval: 1.0, target: self, selector: Selector("timerFire"), userInfo: self, repeats: true)
func timerFire()

NSTimer(timeInterval: 1.0, target: self, selector: Selector("timerFire:"), userInfo: self, repeats: true)
func timerFire(timer : NSTimer)

NSTimer 的文档在选择器参数中提到了这一点,但远未明确。 “选择器应具有以下签名:timerFireMethod:(包括一个冒号以指示该方法采用参数)。”

最佳答案

您犯了一个简单但常见的错误。

您的方法签名应该是:

func timerFire(timer: NSTimer) {}

你的计时器设置应该是:

NSTimer(timeInterval: 1.0, target: self, selector: "timerFire:", userInfo: nil, repeats: true)

错误是您在选择器名称中遗漏了冒号。 timerFire 不同于 timerFire:。跳过冒号,它会寻找这样的方法:

func timerFire() {}

没有 NSTimer 参数。最好包括参数和冒号,这样您就可以确认您获得的计时器是您期望的计时器。

通知也是如此。如果您使用的是通知中心,请在方法中包含冒号和通知对象。

关于ios - Swift NSTimer 无法识别的选择器发送到实例 timerFireMethod,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35102817/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com