2011-08-13 5 views
1

SO 또는 Google에서 적절한 답을 찾지 못하는 것 같습니다.별도의 스레드에 NSTimer가 UI 요소를 묶지 않아요.

나는 15 초마다 새로운 데이터를 얻기 위해 웹 서버를 치고있다. 문제는 서버에서 응답을 기다리는 동안 (몇 초에 한 번) 내 사용자 인터페이스가 묶여있는 것입니다. 백그라운드에서 새 데이터를 가져올 수 있도록 별도의 스레드에서 NSTimer를 시작하는 방법을 파악하지 못하는 것 같아서 UI 단추를 반응 적으로 남겨 둡니다.

제안 사항?

감사합니다.

답변

5

서버에서 요청할 때 비동기 NSURLRequest를 사용하여 데이터를 수신 할 수 있습니다. 그렇다면 주 스레드에 NSTimer를 유지할 수 있습니다. 왜냐하면 모든 작업이 15 초마다 비동기 NSURLRequest를 생성하기 때문입니다. 그렇지 않으면 다음

[[NSRunLoop currentRunLoop] addTimer:MY_TIMER forMode:NSDefaultRunLoopMode]; 

를 호출하여 당신이 원하는대로 실행 루프 타이머를 추가

+ (NSTimer *)timerWithTimeInterval:(NSTimeInterval)seconds target:(id)target selector:(SEL)aSelector userInfo:(id)userInfo repeats:(BOOL)repeats 

와 타이머를 작성하여 백그라운드 스레드에서 NSTimer를 만들 수 있습니다 (실행 루프 currentRunLoop를 교체하는 NSTimer가 있어야합니다.)

+0

Excellent! 새로운 방식으로 코드를 작성하는 데 1 시간이 걸렸지 만 매력처럼 작동했습니다. 조언 해주셔서 감사합니다. – Louie

관련 문제