我有一个http请求,如果我正确收到响应,那么我想启动一个每秒触发一个函数的计时器.该函数也是一个http请求.
这是我启动计时器的代码
if let data = data { do{ let resultJSON = try NSJSONSerialization.JSONObjectWithData(data,options: []) requestClient.id = resultJSON["id"] as! Double self.timerResponse = NSTimer.scheduledTimerWithTimeInterval(1,target: self,selector: "checkIfThereAreResponeses",userInfo: nil,repeats: true) self.timerResponse!.fire() }catch{ } }
如你所见,我正在调用一个名为checkIfThereAreResponses的函数
在该函数中,我有一个print语句,并且该print语句只打印一次,尽管我的计时器应该每1秒工作一次
我有什么遗失?
这就是功能
func checkIfThereAreResponeses(){ if (requestClient!.id != nil) { let url = NSURL(string: "http://localhost:blablabla") let request = NSMutableURLRequest(URL: url) request.HTTPMethod = "POST" let session = NSURLSession.sharedSession() task = session.dataTaskWithRequest(request,completionHandler: {(data,response,error) in if let error = error { print("error = \(error)") } if let data = data { do { let resultJSONArray = try NSJSONSerialization.JSONObjectWithData(data,options: []) as! NSArray bla bla bla }catch { print("no responses yet = \(error)") } } }) task!.resume() }else { print("not yet ") } }
我收到JUST ONCE的印刷品还没有回复
解决方法
如果你在完成处理程序中有这个代码,建议NSTimer在主线程中运行,这可能是原因.您可能需要以下内容:
dispatch_async(dispatch_get_main_queue(),{ // Your timer logic here })
Apple文档说:
Timers work in conjunction with run loops. To use a timer effectively,
you should be aware of how run loops operate—see NSRunLoop.
(NSTimer)
The NSRunLoop class is generally not considered to be thread-safe and
its methods should only be called within the context of the current
thread. You should never try to call the methods of an NSRunLoop
object running in a different thread,as doing so might cause
unexpected results.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。