2013-06-25 1 views
0

친애하는 전문가와 친구,아이폰 OS : 앱 종료된다

안녕, 나는 하루 종일이를 얻기 위해 노력 해왔다 때 NSDefault가 /로드를 저장하지 않습니다,하지만 난 시도 아무것도 작동하는 것 같다 없습니다. 기본적으로 NSDefault를 사용하여 문자열 배열 (최대 : 20, 무거운 무게)을 저장하고 싶습니다. 그것은 저장, 괜찮로드하지만, 마이너스 버튼을 눌러 실제 장치에 응용 프로그램을 죽일 때 아닙니다. iPhone 4gs (iOS 6)에서 테스트했습니다.

시도했습니다.
[[NSUserDefaults standardUserDefaults] synchronize];
in both
applicationWillTerminate:(UIApplication *)application
and
applicationDidEnterBackground:(UIApplication *)application
하지만 작동하지 않았습니다.

참고 : NSLog에서 실제 장치의 백그라운드에서 응용 프로그램을 종료하지 않는 한 NSDefault에서 값을 다시 가져옵니다.

이유를 아는 사람이 있습니까? 미리 감사드립니다. 견본을 인용하십시오.

========================= 편집 (추가 CODE) :

나는 희망, 일부 코드에 추가하고 그것을 그 누군가가 정말로 나를 도울 수 있다는 것을 분명히합니다.

미리 감사드립니다. 다음 어떤 조치 모두

self.count = [NSNumber numberWithInt:[self.count intValue] + 1]; 
count is a NSNumber 
NSData *count = [NSKeyedArchiver archivedDataWithRootObject:self.count]; 
[[NSUserDefaults standardUserDefaults] setObject:count forKey:@"count"]; 
[[NSUserDefaults standardUserDefaults] synchronize]; 
arrayForSavedKey is a NSMutableArray 
[[NSUserDefaults standardUserDefaults] synchronize]; 
NSData *array = [NSKeyedArchiver archivedDataWithRootObject:self.arrayForSavedKey]; 
[[NSUserDefaults standardUserDefaults] setObject:array forKey:@"arrayForSavedKeys"]; 

:
applicationWillResignActive : I가 시도

applicationWillEnterBackground:(UIApplication *)application 

(UIApplication *) 애플리케이션 [NSUserDefaults standardUserDefaults] 동기화] 다음 줄을 추가; loadSavedData 및과 같이 아카이브 해제 :

NSData *savedKeys = [[NSUserDefaults standardUserDefaults] objectForKey:@"arrayForSavedKeys"];<br> 
NSMutableArray *array = [[NSMutableArray alloc] initWithArray:[NSKeyedUnarchiver unarchiveObjectWithData:savedKeys]];<br> 
self.arrayForSavedKey = [[NSMutableArray alloc] initWithArray: array];<br> 

(거기에 몇 NSStrings 있습니다) 데이터를 검색하려면, 나는 호출하여 클래스의 메소드를 호출 할 수있는 위임을 어느 NSLOG 출력 및 모든 건 괜찮아요 그래서 난 빼기 기호로 응용 프로그램을 죽이지 마라. (실제 앱을 사용하면 NSLog에서 아무 것도 볼 수 없습니다. 일단 앱을 죽이면 앱이 xCode에서도 실행을 멈 춥니 다.)

오늘 하루 종일 보냈습니다. 내 지혜. 도와주세요.

답변

3

applicationWillTerminate:은 아주 특별한 몇 가지 경우에만 호출되므로 사용하는 것을 신경 쓰지 마십시오.

기본값을 저장하기 위해 applicationWillEnterForeground:을 사용하는 것은 너무 늦습니다.

[[NSUserDefaults standardUserDefaults] synchronize];으로 전화를 걸 수있는 적절한 위치는 applicationDidEnterBackground:입니다. 이렇게하면 앱이 백그라운드에서 종료되면 기본값이 이미 저장됩니다.

+0

디버거 (또는 'NSLog' 문)를 사용하여 앱이 백그라운드로 들어갈 때'synchronize'에 도달했음을 확인 했습니까? – rmaddy