iOS9 스토리 보드 처리되지 않은 작업 (handleNonLaunchSpecificActions)이란 무엇입니까?
스토리 보드를 사용할 때 iOS 9에서 내 앱을 실행할 때 콘솔에 다음 오류가 표시되는 것을 확인했습니다. xCode7을 사용하고 있습니다. 이것이 내가 걱정할 필요가있는 것입니까?
-[UIApplication _handleNonLaunchSpecificActions:forScene:withTransitionContext:completion:] ** unhandled action -> <FBSSceneSnapshotAction: 0x176bfb20> {
handler = remote;
info = <BSSettings: 0x176a5d90> {
(1) = 5;
};
}
코드에 문제가 없습니다. 이것은 Apple 내부의 로깅 메시지이며 이에 대한 레이더를 제출해야합니다.
이것이 아마도 Apple의 코드 임을 보여주는 두 가지 힌트가 있습니다.
메서드 이름 앞의 밑줄
_handleNonLaunchSpecificActions:forScene:withTransitionContext:completion
은 메서드가 선언 된 클래스에 대해 비공개 / 내부임을 나타내는 규칙입니다. ( 이 주석 참조 )FBSSceneSnapshotAction
Rene Ritchie에 따르면 " iOS 9 위시리스트 : 게스트 모드"의 Rene Ritchie는 앱 실행과 관련된 전체 소프트웨어 제품군의 일부인 FrontBoard 의 두 글자 접두사 가 속기 라고 추측하는 것이 합리적 입니다.
iOS 8을 통해 Apple은 시스템 관리자 인 SpringBoard를 더 작고 집중적 인 여러 구성 요소로 리팩토링했습니다. 백그라운드 작업을 처리하기 위해 이미 분리 된 BackBoard 외에도 전경 작업을 위해 Frontboard를 추가했습니다. 또한 안전하고 암호화 된 조건에서 잠금 화면을 처리하기 위해 PreBoard를 추가했습니다. [...]
BS
접두사가 무엇인지 BSSettings
모르겠지만
BS
는의 약어이며이 BackBoard Settings
로그 메시지를 분석하면 사용자가 한 작업이 아님을 나타내므로 로깅 메시지를 재현하는 단계가있는 레이더를 제출해야합니다.
스택 추적을 시도하고 싶다면 여기에 링크 된 카테고리를 구현할 수 있습니다 . 일부는 비공개 API를 재정의하는 것이 좋지 않다고 주장하지만,이 경우 스택 추적을 가져 오기위한 임시 주입은 너무 해로울 수 없습니다.
편집하다:
그러나 우리는 여전히이 행동이 무엇인지 알고 싶습니다. 그래서 중단 점을 설정 -[UIApplication _handleNonLaunchSpecificActions:forScene:withTransitionContext:completion]
하고 레지스터 값을 인쇄하기 시작했고 FBSceneImpl
내 애플리케이션에 대한 전체 정보가 포함 된 클래스를 찾았습니다 .
다음에 호출되는 private 메서드 (
프로그램 카운터,
명령 포인터, 레지스터 15에 저장 됨)를 찾을 수 있습니다.
나는 FBSceneSnapshotAction
로그에서 언급 된 처리되지 않은 것을 찾으려고 했지만 주사위는 없었다. 그런 다음 UIApplication을 서브 클래 싱하고 _handleNonLaunchSpecificActions:forScene:withTransitionContext:completion
. 이제 나는 직접 행동을 취할 수 있었지만 여전히 그것이 무엇인지 모릅니다.
그런 다음 FBSceneSnapshotAction을 다시 살펴 보았습니다. 라는 수퍼 클래스가 BSAction
있습니다.
그런 다음 RuntimeBrowser 와 유사한 도구 를 작성 하고 BSAction의 모든 하위 클래스를 검색했습니다. 꽤 많은 목록이 있음이 밝혀졌습니다.
우리가 가지고있는 두 가지 메서드 이름 (하나는 로그에서, 하나는 장치의 프로그램 카운터에서)은 이러한 작업이 시스템 전체에 작업을 전달하기 위해 내부적으로 사용된다는 것을 나타냅니다.
일부 작업은 앱 델리게이트의 콜백으로 전송되는 반면 다른 작업은 내부적으로 처리됩니다.
여기서 일어나는 것은 올바르게 처리되지 않은 작업이 있고 시스템이이를 인식하고 있다는 것입니다. 분명히 우리는 그것을 볼 수 없었습니다.
AFAIK, 위의 정보는 화면 스냅 샷 중 iOS와 관련이 있습니다. (더블 클릭 홈 멀티 태스킹 관련 동작을 가정합니다) 내 응용 프로그램을 깊이 조사한 결과 부수적 동작이 발생하지 않는 것 같습니다. 지금은 무시해도됩니다.
다음 요점 단순 범주 를 사용 하여 위 함수에 대한 호출에 대해 자신을 테스트 할 수 있습니다 .
.h 또는 .m 파일에 IBAction 메서드를 선언했지만 컨트롤에 바인딩하지 않았을 때 발생합니다.
.m 예 :
- (IBAction)click:(id)sender{
}
하지만이 메서드는 스토리 보드의 컨트롤에 할당되지 않았습니다.
내 앱에서 왜 발생하는지 알지 못했지만 로그 창에 표시되지 않도록하려면 최소한 예외를 포착 할 수 있습니다. 해결책은 아니지만 캐치에서 전달되는 인수를 검사하여 왜 이것이 실패하는지 더 많은 통찰력을 줄 수 있습니다.
신속한 2 버전 :
import UIKit
extension UIApplication {
func _handleNonLaunchSpecificActions(arg1: AnyObject, forScene arg2: AnyObject, withTransitionContext arg3: AnyObject, completion completionHandler: () -> Void) {
//whatever you want to do in this catch
print("handleNonLaunchSpecificActions catched")
}
}
'Programing' 카테고리의 다른 글
Go 인터페이스 필드 (0) | 2020.09.19 |
---|---|
CoreData와 REST 웹 서비스를 비동기 적으로 동기화하는 방법과 동시에 모든 REST 오류를 UI에 적절하게 전파하는 방법 (0) | 2020.09.19 |
localhost에서 https / SSL을 어떻게 사용합니까? (0) | 2020.09.19 |
Android에서 AES 암호화를 사용하는 모범 사례는 무엇입니까? (0) | 2020.09.19 |
이 유효하지 않은 코드가 g ++ 6.0에서 성공적으로 컴파일되는 이유는 무엇입니까? (0) | 2020.09.19 |