在 swift 中使用延迟调用数组项 - 获取 UIResponder 错误
Posted
技术标签:
【中文标题】在 swift 中使用延迟调用数组项 - 获取 UIResponder 错误【英文标题】:call array items with a delay using in swift - get UIResponder error 【发布时间】:2016-05-03 19:48:02 【问题描述】:四处搜索似乎并没有提供我立即理解的任何内容。
我正在尝试为一个会打印出 'DOS like' 语句的应用程序制作一个愚蠢的“old skool”加载屏幕。
我当前的代码看起来像这样,但我得到一个 UIResponder, UIApplicationDelegate 错误 - EXE_BAD_ACCESS
我已尝试将其复制到新项目等。仍然遇到相同的错误。
代码如下:
class ViewController: UIViewController
@IBOutlet weak var loadingLBL: UILabel!
@IBOutlet weak var logoIMG: UIImageView!
override func viewDidLoad()
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
//fades logo image in
logoIMG.alpha = 0
UIView.animateWithDuration(5, animations:
self.logoIMG.alpha = 1;
)
//array for loading text
var loading = ["Loading please wait.......\n", "Registry , OK!\n", `"Available ram, 256k\n", "Bios Load... OK\n", "Welcome" ]`
var i = 0
var str: String = ""
var timer = NSTimer()
//delay function for loading array text
func delayFunc()
str += "\(loading[i])\n"
loadingLBL.text = str
if i == loading.count - 1
timer.invalidate()
i += 1
timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: Selector(delayFunc()), userInfo: nil, repeats: true)
override func didReceiveMemoryWarning()
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
正如我所提到的,我遇到了崩溃,我不知道自己做错了什么。
任何帮助将不胜感激。
【问题讨论】:
要了解如何调试崩溃,请访问raywenderlich.com/10209/my-app-crashed-now-what-part-1 在您了解如何调试后,使用有关崩溃的具体详细信息更新您的问题,包括完整的错误消息和实际导致错误的行。 按照@rmaddy 的建议进行操作之后。我将首先从您的 viewDidLoad 中删除您的 timer、i 和 str 变量以及您的 delayFunc。所有这些都应该在类级别......另外,你的计时器选择器参数应该是#selector(ViewController.delayFunc) 【参考方案1】:我认为你的问题是 delayFunc() 在 viewDidLoad 中,选择器在 viewController 中查找但找不到函数(因为它在 viewDidLoad 中)
编辑:我不是 100% 清楚为什么选择器在 viewDidLoad 中时找不到 delayFunc。如果您在另一个函数的主体中声明一个函数,则它的生命周期最多是其“父”函数的生命周期。因此,当您的计时器尝试调用 delayFunc 时,delayFunc 不再存在,因为 viewDidLoad 已完成运行。
试试:
var i = 0
var str: String = ""
var timer = NSTimer()
var loading = ["Loading please wait.......\n", "Registry , OK!\n", "Available ram, 256k\n", "BIOS Load... OK\n", "Welcome" ]
override func viewDidLoad()
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
//fades logo image in
logoIMG.alpha = 0
UIView.animateWithDuration(5, animations:
self.logoIMG.alpha = 1;
)
timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: "delayFunc", userInfo: nil, repeats: true)
func delayFunc()
str += "\(loading[i])\n"
loadingLBL.text = str
if i == loading.count - 1
timer.invalidate()
i += 1
override func didReceiveMemoryWarning()
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
【讨论】:
以上是关于在 swift 中使用延迟调用数组项 - 获取 UIResponder 错误的主要内容,如果未能解决你的问题,请参考以下文章