2014-07-13 5 views
6

내 앱은 NSTimer 개체의 여러 스레드를 사용합니다.빠른 앱 중지/일시 중지

고정 된 지연이 아닌 임의의 시간에 무작위로 호출되는 한 기능 내에서 전체 앱을 일시 중지하고 1 second의 스레드 만 일시 중지합니다. 나는 다음과 같은 코드가 있습니다

[self performSelector:@selector(subscribe) withObject:self afterDelay:3.0 ]; 

목표 C이고, I는 다음과 같이 스위프트로 번역 시도 :

self.performSelector(Selector:changeColourOfPage(), withObject: self, afterDelay: 1.0) 

하지만 내가 오류 Missing argument for parameter 'waitUntilDone' in call을 얻고 나는 그것을에 있음을 넣을 때 그것은 인수를 원한다고 말합니다. modes 그러나 내가 그걸 넣었을 때는 Extra argument modes라고합니다.

나는 앱을 일시 중지하는 방법과 모든 스레드를 몇 초 동안 알아 내고 정상적으로 계속 수행 할 수 없다.

아이디어가 있으십니까?

답변

11

performSelector 메서드는 Swift에서 사용할 수 없습니다. dispatch_after를 사용하여 지연 기능을 가져올 수 있습니다.

let delayTime = dispatch_time(DISPATCH_TIME_NOW, Int64(NSEC_PER_SEC * 1)) 
dispatch_after(delayTime, dispatch_get_main_queue()){ 
    changeColourOfPage() 
} 
+0

완벽한 예 @conner; 나를 위해 완벽하게 일했다! –

0

오래된 질문에 대답 미안하지만, 그냥이 할 수있는 더 좋은 길을 따라 온 - 당신이 좋아하는 다른 단위를 대체 할 수 있습니다 3.1

DispatchQueue.main.asyncAfter(deadline: .now() + .seconds(1)) { 
    changeColourOfPage() 
} 

스위프트에

import Darwin //Put this line at the beginning of your file 
func pauseForAMoment() { 

     sleep(1) 
     changeColorOfPage() 

} 
+0

sleep()을 호출 할 때 전체 프로그램이 중단되기 때문에 이것이 _better_하는 방법이라고 생각하지 않지만이 특정 용도로는 작동합니다. – Jerrybibo

0

또 다른 방법 .milliseconds(1000) 또는 .microseconds(1_000_000) 또는 .nanoseconds(1_000_000_000)입니다.