2013-01-16 4 views
0

다음 호스트 서버로 전송되는 메시지를 만드는 앱이 있습니다.iOS 5 분마다 확인

앱은 완전히 오프라인으로 작동 할 수 있어야하며 메시지가 생성되어 CoreData에 저장되면 '보내지 않음'으로 설정됩니다. 응용 프로그램은 즉시 그들을 보내려고합니다. 연결이 있고 서버 응답이 긍정적이면 "보낸"메시지를 설정합니다.

물론 메시지가 만들어 질 때 전화기가 오프라인 상태이면 메시지가 전송되지 않습니다.

모든 내 메시지는 모든 메시지 보내기 및 대기열을 관리하는 단일 개체를 통해 전송됩니다.

나는 5 분마다 (테스트를 위해 10 초로 변경됨) 전송을 트리거하는 싱글 톤의 init에 NSTimer를 넣으려고했다. NSTimer의 기간보다 오래 앱을 중지 할 때까지 제대로 작동합니다.

30 초 동안 앱을 중지했다가 다시 시작하면 타이머가 실행되지 않습니다.

동일한 기능을 사용할 수 있도록이 작업을 수행하는 더 좋은 방법이 있습니까? 즉, 보내는 메시지를 몇 분마다 확인하고 대기중인 메시지를 보냅니다.

편집

나는 타이머 또는 아무것도를 무효화하고 있지 않다. 타이머가 작동하지 않아 앱이 작동하지 않으면 다시 예약하지 않는 것입니다. 나는 배경에 응용 프로그램을 넣고 타이머가 문제없이 계속 실행됩니다 후 화재로 인하여 전에 다음을 활성화하면 내 NSTimer에 대한

코드는 ...

[NSTimer scheduledTimerWithTimeInterval:10 target:self selector:@selector(sendMessages) userInfo:nil repeats:YES]; 

입니다. 하지만 앱을 배경에 놓은 다음 30 초를 기다렸다가 다시 앱으로 돌아 가면 타이머가 다시 작동하지 않습니다.

+0

나는 타이머가 멈추는 것을 막을 수 없다. 타이머를 설정하고 코드를 릴리스하거나 무효화 한 코드를 게시 할 수 있습니까? 고맙습니다! –

+0

타이머 문제를 설명하기 위해 코드가 추가되었습니다. – Fogmeister

답변

4

당신이 NSNotifications을 듣고 간단하게 무효화 타이머를 복원 할 수있을 때 응용 프로그램 잎과 실행 상태에 들어갑니다

또한
UIApplicationDidBecomeActiveNotification 
UIApplicationWillResignActiveNotification 

하면 NSTimer의 속성이 strong 그래서 타이머 아무튼 있는지 확인을 풀려나.

@property (strong) NSTimer *timer; 

타사 대기열 클래스 또는 라이브러리를 사용하는 다른 방법으로 문제를 해결할 수 있습니다. 예 : IFOfflineQueue.

+0

아, 나는 그 일을 생각하지 않았다! 나는 그것이 통보를 사용하여 그것을 줄 것이라고 생각한다. – Fogmeister

+0

또는 단순히 타이머를 다시 시작할 수 있습니다. -viewDidAppear – Oleg

+0

이 방법을 시도하고 이상한 결과가 나타납니다. 내가해야 할 일은 내가 그것을 계획했을 때 싱글 톤의 강력한 자산으로 타이머를 저장하는 것이었다. 답을 편집하여이 내용을 추가하면 다음과 같이 동의합니다 : 답을 찾는데 도움을 준 D. – Fogmeister