2017-11-11 7 views
3

기본적으로 나는 (json을 사용하여) 온라인에서 숫자를 가져 오는 앱을 만들고 있는데, 내가 알고 싶은 것은 5 초마다 데이터를 다시로드 할 수있는 방법이다. 나는 그것이 getData()라는 함수에 있으므로 그것을 설정했다. 그리고 무한 while 루프는 다음과 같이 동작 할 것이라고 생각했다. while 1 > 0 { getData() sleep(5) } 그러나 앱을 실행할 때마다 충돌이 발생한다. (무한 루프없이 getData()를 호출 할 때 작동합니다.) 뭔가 빠졌습니까? 5 초마다 json 데이터를 새로 고칠 수 있습니까? 고맙습니다! 이러한 차별화Swift에서 동일한 사이트의 새 JSON 데이터를 어떻게 다시로드 할 수 있습니까?

+2

'sleep()'또는 스레드를 차단할 무한 루프는 사용하지 마십시오. 폴링을해야한다면,'Timer()'를 사용하십시오. – Paulw11

+0

타이머 설정 방법은 무엇입니까? 그 데이터를 새로 고칩니다? – Carter4502

+0

['Timer'] (https://developer.apple.com/documentation/foundation/timer)는 "틱"할 때 함수를 실행합니다. 해당 기능에서 데이터를 다시로드 할 수 있습니다. – Paulw11

답변

1

당신은 사용할 수 있습니다

var timerDispatchSourceTimer : DispatchSourceTimer? 

당신이 ViewWillAppear에서 함수를 호출하고 당신이 원하는대로 지연을 설정할 수 있습니다

timerDispatchSourceTimer = DispatchSource.makeTimerSource(flags: [], queue: DispatchQueue.main) 
timerDispatchSourceTimer?.scheduleRepeating(deadline: .now(), interval: .seconds(YOUR DELAY TIME)) 
timerDispatchSourceTimer?.setEventHandler{ 
      // do something here 
    self.performSelector(inBackground: #selector(YOUR FUNCTION), with: nil) 
     } 
timerDispatchSourceTimer?.resume() 

및 viewwillDisAppear에 :

timerDispatchSourceTimer?.cancel() 
관련 문제