当筵意气临九霄,星离雨散不终朝。这篇文章主要讲述无法识别的选择器发送到AppDelegate中的实例相关的知识,希望能为你提供帮助。
无论应用程序是打开还是在后台运行,我都试图获得一个每5秒钟调用一次的方法,所以在我的AppDelegate中,我认为有一个定时器每隔5秒调用一个方法是个好主意:
var helloWorldTimer = Timer.scheduledTimer(timeInterval: 5.0, target: self, selector: #selector(sayHello), userInfo: nil, repeats: true)@objc func sayHello()
{
print("hello World")
}
但是,我收到此错误:
NSInvalidArgumentException', reason: '-[_SwiftValue sayHello]: unrecognized selector sent to instance
我不完全确定为什么因为该方法被正确引用?有谁知道我为什么会收到这个错误?
答案你崩溃是因为在AppDelegate完全初始化之前你不能使用
self
(target: self
)。所以你应该用这种方式初始化计时器:var helloWorldTimer:Timer?func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) ->
Bool {
self.helloWorldTimer = Timer.scheduledTimer(timeInterval: 5.0, target: self, selector: #selector(sayHello), userInfo: nil, repeats: true)
return true
}
引用Setting a Default Property Value with a Closure or Function的Apple文档:
如果使用闭包来初始化属性,请记住在执行闭包时尚未初始化实例的其余部分。这意味着您无法从闭包中访问任何其他属性值,即使这些属性具有默认值。此外:
【无法识别的选择器发送到AppDelegate中的实例】您也不能使用隐式self属性,也不能调用任何实例的方法。
推荐阅读
- 如何使用android延迟不扩展或实现Thread或Runnable
- android - 在给定的时间后只调用一次通知
- 如何插入带有镶木地板格式和SNAPPY压缩的蜂巢表()
- 如何制作Mac终端弹出/警报( AppleScript的?)
- kubectl apply -f service.yml抛出错误
- java堆大小错误dex2jar android反编译解决方案()
- 容器'Web App Libraries'引用非现有库'C( workWebRootWEB-INFlibgoogle-collections-1.0-(示例代码)
- 如何备份Amazon EC2实例
- 什么是网站审核,为什么你需要一个()