IOS:在向textview添加更多数据时,应用程序崩溃了

时间:2016-09-19 06:29:33

标签: ios swift uitextview

我有一个iOS应用程序,它使用一些API与电路板通信。我使用dispatch_async在一个单独的线程中循环调用这些API,以测试健壮性并使用dispatch_async(get_main_queue())将这些API的结果记录到文本视图中。但是这个应用程序在循环运行后几分钟就崩溃了。我评论了日志记录行并进行了检查,现在应用程序没有崩溃。

所以我限制textview中的字符应该是500.如果字符超过500,我将清除textview。但是应用程序仍然崩溃。

该应用有启动和停止按钮。 “开始”按钮启动循环,停止按钮根据bool变量停止循环。

这是我的代码:

@IBAction func start_pressed(sender:UIButton)
{
    canRunLoop = true
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), {() -> () in
        while self.canRunLoop {

            let result = self.object.API1()

            if result
            {
                self.logSuccessMessage("==> Write Data Response: \(result)”)
            }

            let result1 = self.object.API2()

            if result1
            {
                self.logSuccessMessage("==> Write Data Response: \(result1)”)
            }

            let result2 = self.object.API3()

            if result2
            {
                self.logSuccessMessage("==> Write Data Response: \(result2)”)
            }

        }

    })
}


@IBAction func stop_pressed(sender:UIButton)
{
    canRunLoop = false
}


func logSuccessMessage(str: String)
{
    dispatch_async(dispatch_get_main_queue()) { () -> Void in

        if self.successLogView.text.characters.count >= 500
        {
            self.successLogView.text = ""
            self.successLogView.text.appendContentsOf("\(str)\n")
        }
        else
        {
            self.successLogView.text.appendContentsOf("\(str)\n")
       // this is to auto scroll the view
            if (self.successLogView.contentSize.height > self.successLogView.frame.size.height)
            {
                let range = NSMakeRange((self.successLogView.text as NSString).length - 1, 1);
                self.successLogView.scrollRangeToVisible(range)
            }
        }
    }
}

如果我在dispatch_sync中执行更新日志,则更新视图的代码将添加到主队列的末尾,从而导致死锁。

有人请帮助。提前致谢

我真的被这个困住了,请帮助我。

0 个答案:

没有答案