ios - iOS7 : 백그라운드 작업 ( "myapp"에 허용 된 시간을 초과하는 활성 어설 션이 있음)

기사 출처 ios objective-c location-based

충돌 보고서 세부 정보 :

Hardware Model:      iPhone5,2
Exception Type:  00000020
Exception Codes: 0x000000008badf00d
Highlighted Thread:  3

Application Specific Information:
MyApp[1369] has active assertions beyond permitted time: 
{(
<BKProcessAssertion: 0x175ca7d0> identifier: Called by MyApp, from -[AppDelegate applicationDidEnterBackground:] process: MyApp[1369] permittedBackgroundDuration: 180.000000 reason: finishTask owner pid:1369 preventSuspend  preventIdleSleep      preventSuspendOnSleep 
)}


스레드 3 :

Thread 3 name:  com.apple.NSURLConnectionLoader
Thread 3:
0   libsystem_kernel.dylib          0x3937ea50 mach_msg_trap + 20
1   libsystem_kernel.dylib          0x3937e848 mach_msg + 36
2   CoreFoundation                  0x2e61261c __CFRunLoopServiceMachPort + 152
3   CoreFoundation                  0x2e610d3c __CFRunLoopRun + 788
4   CoreFoundation                  0x2e57b7a4 CFRunLoopRunSpecific + 520
5   CoreFoundation                  0x2e57b586 CFRunLoopRunInMode + 102
6   Foundation                      0x2efbb23c +[NSURLConnection(Loader)     _resourceLoadLoop:] + 316
7   Foundation                      0x2f030a0a __NSThread__main__ + 1058
8   libsystem_pthread.dylib         0x393f8956 _pthread_body + 138
9   libsystem_pthread.dylib         0x393f88c6 _pthread_start + 98
10  libsystem_pthread.dylib         0x393f6ae4 thread_start + 4


"applicationDidEnterBackground"에서이 코드로 백그라운드 작업을 사용하는 내 앱 :

// 10min background task
UIBackgroundTaskIdentifier myLongTask;
myLongTask = [[UIApplication sharedApplication]
              beginBackgroundTaskWithExpirationHandler:^{
                  [locationMgrInstance timerSet];
              }];
// cell change  
[locationMgrInstance startMonitoringSignificantLocationChanges];


iOS 6에서 잘 작동하지만 ... iOS 7은 180 초 후에 어설 션을 던집니다.
도움!
이 메시지는 백그라운드 작업이 너무 오래 실행되었음을 나타냅니다. iOS7은 백그라운드 처리의 일부 측면을 변경했습니다. 특히 백그라운드 작업은 짧은 시간 내에 완료되어야하며 그렇지 않으면 앱이 종료됩니다. 백그라운드 작업이 어떻게 작동하는지 살펴 봐야합니다. 특히 [[UIApplication sharedApplication] endBackgroundTask:task];에 적시에 전화하도록해야합니다. 만료 처리기에서도이 메서드를 호출해야합니다.

Apple iOS App Programming Guide Background Execution Guide의 백그라운드 실행 및 멀티 태스킹 섹션을 살펴보십시오.

또한 [[UIApplication sharedApplication]backgroundTimeRemaining]를 확인할 수 있습니다. iOS 6에서는 10 분에 시작되었습니다. iOS 7에서는 3 분에 시작하므로 180 초 후에 시간이 초과됩니다. 새로운 한도를 처리하려면 배경 전략을 재평가해야합니다.

이 질문에 대해 Stack Overflow에서 비슷한 토론을 찾았습니다: https://stackoverflow.com/questions/22679845/

관련 기사
ios - 'NSInvalidArgumentException', 이유 : '***-[NSURL initFileURLWithPath :] : nil string parameter'
ios - 핵심 데이터 / SQLite 데이터베이스를 앱에 다운로드 하시겠습니까?
ios - UITextView contentOffset이 iOS7에서 CGPointZero로 초기화되지 않았습니다.
ios - google-cast 샘플 ios / application에서이 오류 7은 무엇입니까?
ios - UIKit 다이내믹스가있는 고무처럼 탄력있는 버튼
ios - Apple의 ToDoList 앱 튜토리얼을 살펴보면 항목을 탭해도 "완료된"체크 표시가 제대로 추가되지 않습니다.
ios - RestKit : 빈 response.body를 처리하는 방법?
ios - MPMoviePlayerViewController 가로 모드 사용
ios - 서버에 이미지를 게시하기 위해 UIImage를 NSData로, NSData를 NSString으로 변환
ios - AFNetworking 2.0을 사용하여 데이터를 POST하는 방법은 무엇입니까?