현재 작업중인 앱에 이상한 동작이 있습니다. Xcode, iTunes 또는 TestFlightApp를 통해 테스트 빌드를 설치할 때마다 응용 프로그램이 정상적으로 시작되어 잘 실행됩니다. 문제는 수동으로 앱을 종료하고 다시 시작하면 발생합니다. 그런 다음 시작 이미지가 표시되고 앱이 가장 멀리 이동합니다. 잠시 동안 멈추고 OS는 그 이후에 전체 프로세스를 지 웁니다. 오류 로그에는 상태 정보가 포함되어있어 유용한 정보가 포함되어 있지 않습니다. 응용 프로그램 특정 정보 :에 시작하지 못했습니다. 또한 주최자의 콘솔 로그 다음'Application'을 (를) 실행하지 못했습니다.
- 주의 사항 : COM : 위치 아이콘이 현재 상태 '비활성'
- 경고에 있어야합니다. . 시간 내에 실행하지 못했습니다.
- 경고 : MyApp의 강제 종료 보고서 [7956] ...
- 경고 : 충돌보고가 완료되었습니다.
- 주의 사항 : (UIKitApplication : COM [0x6a86]..) 종료 함 : 처치 : 9
- 주의 사항 : (UIKitApplication :.. com [0x6a86]) 스로틀의 부활 : 윌 시작 2,147,483,625 초
- 경고 : 응용 프로그램 'UIKitApplication : com. . 문제를 연구 9
이미 보냈어요 하루 종일 : 처치 : [0x6a86] '비정상적 신호 9 을 종료. 그냥 명확히하기 - UIApplication 델리게이트 메서드 (applicationDidBecomeActive, didFinishLaunchingWithOptions 등)에서 동기 작업이나 많은 양의 작업이 수행되지 않습니다. 내가 알아 차린 것은 실행 중에 URL 요청이 수행되지 않으면 문제가 단순히 발생하지 않는다는 것입니다. 즉, 앱이 그 전에 죽은 후에 정상적으로 실행됩니다. 문제는 iOS 7에서 발생하지만 앱은 iOS 5와 6도 지원합니다. 모든 요청이 수행되는 방법 기본적입니다
[NSURLConnection sendAsynchronousRequest:request
queue:[NSOperationQueue currentQueue]
completionHandler:^(NSURLResponse *response, NSData *data, NSError *error){if (nil == error) {
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
(...)//creating ppError
if (nil == ppError) {
result = parsing(json, &ppError);
if (nil != ppError) {
result = nil;
}
}
dispatch_async(dispatch_get_current_queue(), ^{
if (PPServiceReturnedInvalidTokenErrorCode == ppError.code) {
(...)//do some parsing stuff
[[NSNotificationCenter defaultCenter] postNotificationName:PPRequestManagerUserAuthenticationTokenDidExprireNotification
object:self
userInfo:userInfo];
}
completion(result, ppError);
});
});
}
else {
completion(nil, ppError);
}
}];
그래서 모든 것이 올바른지 생각하고 아직 내가이 코드를 언급하는 경우 설명 된 문제가 단순히 사라 사실이다.
어떤 제안이나 아이디어라도 감사하겠습니다. 고맙습니다!
악기를 사용하여 앱이하는 일과 코드에서 많은 시간을 소비하는 곳을 확인하십시오. 보통 이것은 주 스레드가 차단되어 있고 시작시 응답 성을 얻기 위해 앱이 약 10 초 이상 걸리는 경우에 발생합니다.완료 핸들러의 – Kerni
, 두 번째 dispatch_async()는 현재 큐로 디스패치 했습니까? 그게 아무 것도하지 않기 때문에 정의에 따라 이미 현재 큐에 있습니다. –
@PatrickGoley 현재 큐의'dispatch_async'는 적어도 다음 runloop에 코드를 셔플합니다. 그래서 그것은 "무언가"를합니다. 이 셔플의 부작용 중 하나는 현재 런 루프가 끝나고 SpringBoard에 앱이 제 시간에 출시되었음을 알리는 것입니다. –