2014-01-09 1 views
0

앱이 백그라운드에서 일시 중지 될 때 타이머가 있습니다.앱이 백그라운드에서 실행될 때 NSDate를 설정하고 상태 복원을 사용하여 앱을 저장하고 복원합니다.

- (void)applicationDidEnterBackground:(UIApplication *)application 
{ 
    self.exitDate = [[NSDate alloc] init]; 
} 

reentryDate를라는 NSDate을 다음과 같이 다음과 같이 앱이 포 그라운드에 돌아 오면
여전히 적절한 시간을 가지고, 나는 AppDelegateexitDate를라는 NSDate을 설정

- (void)applicationWillEnterForeground:(UIApplication *)application 
{ 
    self.reentryDate = [[NSDate alloc] init]; 
} 

그럼 모두 NSDate의 차이점을 얻고 타이머에 추가하십시오.

이 앱은 백그라운드에서 종료되지 않는 한 모두 정상적으로 작동합니다.
앱이 종료되면 앱이 부터 시작하여viewController으로 시작되고 타이머가 중지되었습니다.

이 문제를 해결하기 위해 상태 복원을 사용합니다. 어느 쪽도 잘 작동합니다.
앱이 종료 되더라도 앱은 내가 미리 저장 한 모든 내용을 가지고 에서 마지막으로viewController에서 다시 시작됩니다.

명시 적으로 그렇게 요청했지만 상태 복원에서 저장되지 않는 유일한 점은 내 exitDate입니다.

앱이 돌아 오면 exitDate은 항상 nil입니다.

-(void)encodeRestorableStateWithCoder:(NSCoder *)coder 
{ 
    [coder encodeObject:self.exitDate forKey:@"UnsavedExitDateAppDelegate"]; 
} 

-(void)decodeRestorableStateWithCoder:(NSCoder *)coder 
{ 
    self.exitDate = [coder decodeObjectForKey:@"UnsavedExitDateAppDelegate"]; 
} 

문제는 내가 -applicationWillTerminate, -applicationDidEnterBackground-applicationWillResignActiveexitDate을 설정하려고했습니다된다

나는 그것이라고 다음과 같은 방법 후 아마 인 exitDate 설정 도착 시간을 함께 할 수있는 뭔가가 가정 앱이 다시 시작될 때마다 exitDate은 0입니다.

아이디어가 있으십니까?

답변

0

NSDateFormatter를 사용하는있는 NSString에있는 NSDate 변환 및

을 '배경을 입력나요'와 WillEnterForeground에 NSUserDefaults에서이 문자열을 저장이있는 NSString을 얻을 같은 NSDateFormatter 구문이있는 NSDate로 변환 사용.

또는 Plist에 저장하고 검색 할 수 있습니다.

+0

건배, 그 트릭을하는 것 ... – Chris

+0

또한 나는 초기 방법이 잘 작동하는 바보입니다. 방금 내 decodeObjectForKey에 오타가있었습니다. 고마워요! – Chris

0

날짜 또는 데이터를 공유 환경 설정에 저장할 수 있습니다. 앱이 백그라운드에서 종료 된 경우에도 데이터가 지속됩니다. 현재의 방법과 비교할 때 분명히 많은 고통을 줄 것입니다. 더 많은 설명이 필요하면 알려주세요. :)

-1

NSUserDefaults에 날짜를 저장하십시오. 이 경우 앱을 배경으로 할 때 자동으로 발생하기는하지만 synchronize 메서드를 호출하는 것을 잊지 마십시오. 이렇게되면 약간의 날짜가 추가 될 수 있습니다.

+1

왜 downvote? – Gavin

+0

웁스! 잘못된 버튼. –