사용자가 홈 버튼을 누르면 코어 데이터를 저장하려고합니다. -applicationDidEnterBackground:
에서이 작업을 수행하려고했지만 전화를받지 못했습니다. 여기에서 코어 데이터를 저장할 수 없거나 작업 완료에 시간이 충분하지 않기 때문일 수 있습니다. 그것은 그러나에서 작동합니까 -applicationWillResignActive:
나는 이것을 수행하는 최고의 대리인 방법이며 왜 -applicationDidEnterBackground:
가 작동하지 않는지 궁금합니다. 는사용자가 응용 프로그램을 종료 할 때 코어 데이터 저장?
// CALLS SAVE
- (void)applicationWillResignActive:(UIApplication *)application {
[[self model] saveCoreData:@"SAVE FROM: applicationWillResignActive"];
NSLog(@"APPDEL: %s", __PRETTY_FUNCTION__);
}
// DOES NOT CALL SAVE
- (void)applicationDidEnterBackground:(UIApplication *)application {
[[self model] saveCoreData:@"SAVE FROM: applicationDidEnterBackground"];
NSLog(@"APPDEL: %s", __PRETTY_FUNCTION__);
}
(당신은 내가 제거하면 두 가지 방법이 호출되고 출력에서 볼 수 있듯이 -applicationWillResignActive:
무에서 저장하는 것은 하나가 다른를 차단하고 해당하지 않는 상황 때문에 전혀 발생).
// CONSOLE OUTPUT
2013-03-21 cvb[6724:907] APPDEL: -[AppDelegate applicationWillResignActive:]
2013-03-21 cvb[6724:907] APPDEL: -[AppDelegate applicationDidEnterBackground:]
2013-03-21 cvb[6724:907]
2013-03-21 cvb[6724:907] SAVE: SAVE FROM: applicationWillResignActive
2013-03-21 cvb[6724:907] SAVE: Saving successful ...
편집 :
이 내가 마지막에 무슨 짓을 :
- (void)applicationDidEnterBackground:(UIApplication *)application {
__block UIBackgroundTaskIdentifier bgTask = [application beginBackgroundTaskWithExpirationHandler:^{
[application endBackgroundTask:bgTask];
bgTask = UIBackgroundTaskInvalid;
}];
[[self model] saveCoreData:@"[ENTERING BACKGROUND]"];
}
환호성 구오, 너도 나를 때렸어. – fuzzygoat
applicationDidEnterBackground에서 model의 값은 무엇입니까? 나는 그것이 0이 아닌 것으로 추정한다. – occulus
saveCoreData 메서드가 비동기 적으로 작동합니까? 또는 저장을 완료 할 때까지 차단합니까? 저축은 얼마나 걸립니까? – occulus