[ios] libc ++ abi.dylib : NSException (lldb) 유형의 포착되지 않은 예외로 종료

앱을 신속하게 프로그래밍하고 iPhone 시뮬레이터에서 테스트 앱을 실행하면 모든 것이 작동하지만 오른쪽으로 스 와이프하려고하면 다음 페이지로 이동하기 위해 추가 한 제스처입니다 (View Controller Two). 콘솔 로그에 충돌이 발생하고이 오류 보고서가 표시됩니다.

2014-10-18 12:07:34.400 soundtest[17081:818922] *** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<soundtest.ViewControllerTwo 0x7f92f1f20090> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key sfdfa.'
*** First throw call stack:
(
    0   CoreFoundation                      0x00000001067813f5 __exceptionPreprocess + 165
    1   libobjc.A.dylib                     0x00000001082afbb7 objc_exception_throw + 45
    2   CoreFoundation                      0x0000000106781039 -[NSException raise] + 9
    3   Foundation                          0x0000000106b984d3 -[NSObject(NSKeyValueCoding) setValue:forKey:] + 259
    4   CoreFoundation                      0x00000001066cb400 -[NSArray makeObjectsPerformSelector:] + 224
    5   UIKit                               0x00000001072ce97d -[UINib instantiateWithOwner:options:] + 1506
    6   UIKit                               0x000000010712f698 -[UIViewController _loadViewFromNibNamed:bundle:] + 242
    7   UIKit                               0x000000010712fc88 -[UIViewController loadView] + 109
    8   UIKit                               0x000000010712fef9 -[UIViewController loadViewIfRequired] + 75
    9   UIKit                               0x000000010713038e -[UIViewController view] + 27
    10  UIKit                               0x00000001076cd83f -[_UIFullscreenPresentationController _setPresentedViewController:] + 65
    11  UIKit                               0x000000010710bc49 -[UIPresentationController initWithPresentedViewController:presentingViewController:] + 105
    12  UIKit                               0x000000010713c121 -[UIViewController _presentViewController:withAnimationController:completion:] + 1746
    13  UIKit                               0x000000010713e461 __62-[UIViewController presentViewController:animated:completion:]_block_invoke + 132
    14  UIKit                               0x000000010713e385 -[UIViewController presentViewController:animated:completion:] + 229
    15  UIKit                               0x00000001073bb9d6 _UIGestureRecognizerSendActions + 262
    16  UIKit                               0x00000001073ba679 -[UIGestureRecognizer _updateGestureWithEvent:buttonEvent:] + 532
    17  UIKit                               0x00000001073bf296 ___UIGestureRecognizerUpdate_block_invoke662 + 51
    18  UIKit                               0x00000001073bf192 _UIGestureRecognizerRemoveObjectsFromArrayAndApplyBlocks + 254
    19  UIKit                               0x00000001073b520d _UIGestureRecognizerUpdate + 2796
    20  UIKit                               0x00000001070520a6 -[UIWindow _sendGesturesForEvent:] + 1041
    21  UIKit                               0x0000000107052cd3 -[UIWindow sendEvent:] + 667
    22  UIKit                               0x000000010701fae1 -[UIApplication sendEvent:] + 246
    23  UIKit                               0x000000010702cbad _UIApplicationHandleEventFromQueueEvent + 17370
    24  UIKit                               0x0000000107008233 _UIApplicationHandleEventQueue + 1961
    25  CoreFoundation                      0x00000001066b6ad1 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 17
    26  CoreFoundation                      0x00000001066ac99d __CFRunLoopDoSources0 + 269
    27  CoreFoundation                      0x00000001066abfd4 __CFRunLoopRun + 868
    28  CoreFoundation                      0x00000001066aba06 CFRunLoopRunSpecific + 470
    29  GraphicsServices                    0x000000010a1699f0 GSEventRunModal + 161
    30  UIKit                               0x000000010700b550 UIApplicationMain + 1282
    31  soundtest                           0x000000010624503e top_level_code + 78
    32  soundtest                           0x000000010624507a main + 42
    33  libdyld.dylib                       0x000000010ae4a145 start + 1
    34  ???                                 0x0000000000000001 0x0 + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException
(lldb) 



답변

CMYR- “더 이상 존재하지 않거나 이름이 변경된 IBAction에 버튼을 연결 한 경우에도 발생할 수 있습니다.”

이 문제가 발생하면 Main.storyboard로 이동하여 전화 개요 상단의 노란색 상자 아이콘 (보기 컨트롤러)을 마우스 오른쪽 버튼으로 클릭하고 콘센트에 노란색 플래그를 삭제하십시오.

이와 같은 인스턴스에서 발생하는 일은 아마도 액션의 이름을 지정한 다음 이름을 바꾼 것입니다. 이전 이름을 삭제해야하며 이것이 유일한 문제인 경우 시뮬레이션에서 바로 시작됩니다!

여기에 이미지 설명을 입력하십시오


답변

OS_ACTIVITY_MODE 변수를 우연히 설정 했습니까? 이 변수가 설정되어 있는지 확인하고 끄려면 Xcode 9에서 다음을 수행하십시오.

Select from Xcode menu Product -> Scheme -> Edit Scheme..
Select the Run scheme and look under Arguments.
If you see the OS_ACTIVITY_MODE variable checked, deselect it


답변

Xcode 9 및 Swift 4에서 :

예외의 원인을 알기 위해 예외 스택을 인쇄하십시오.

  1. 중단 점 탐색기 표시로 이동하십시오.
  2. 예외 중단 점 추가 (+) 추가

  3. 새 중단 점, Control-Click, 중단 점 편집을 선택하십시오.

  4. 동작 추가 및 입력 : po $ arg1

여기에 이미지 설명을 입력하십시오


답변

필자의 경우 대리자 메서드를 호출했지만 메서드가 선언되지 않았습니다.

이 오류는 일반적이며 여러 가지 이유로 나타날 수 있습니다. 실제로 무슨 일이 있었는지 확인하기 위해 로그를 비활성화하지 않았는지 확인하십시오. OS_ACTIVITY_MODE 사용비활성화 한 체계에서 를 하십시오. 관련이없는 많은 로그를 방지하기 위해 비활성화했을 수 있지만 편리합니다.

예외 중단 점을 추가하여 원인을 더 자세히 추적 할 수도 있습니다. po $arg1 . Ahmed-Lotfi가 이미 언급했듯이

다음은 일반적인 점검 목록입니다.

2) Check if you have renamed an IBOutlet and calling it
3) Check if you have renamed a method name or the method doesn't exist
4) Check if you are trying to add or remove any view from hierarchy
5) Check for any missing framework or library
6) Check if you’ve forgot to register your custom cell identifier
7) Check for any missing flag in the Proejct Setting (-obj) or any other linker flag etc.


답변

다른 솔루션은 나에게서 작동하지 않았습니다. Swift 2.3 레거시 모드 에서 실행될 때 Xcode 8에만 적용 됩니다 .

Interface Builder가 버튼에 연결 해야하는 메소드의 이름을 바꾸려고하는 것 같습니다.

자세한 내용 은 레이더 입니다.

해결책 (해결 방법)은 메소드 매개 변수 이름을 _다음 으로 수동으로 바꾸는 것입니다 .

@IBAction func editPictureTapped(sender: UIButton) {  // not working
    print("Tapped")
}

이것으로 변경하십시오 :

@IBAction func editPictureTapped(_: UIButton) {     // working OK
    print("Tapped")
}


답변

Segue 식별자 이름이 잘못되었을 수도 있습니다. 예-

performSegueWithIdentifier("wrongSegueName", sender: self)


답변

내 상황은 조금 달랐고 UINavigationController, 에 의지하려고 노력했고, 나를 위해 고 쳤던 것은 주요 대기열 부분을 얻는 것이 었습니다.

Objective-C의 경우 :

dispatch_async(dispatch_get_main_queue(), ^{
    [self performSegueWithIdentifier:@"SegueName" sender:self];
});

스위프트 3의 경우 :

DispatchQueue.main.async { [weak self] in
    self?.performSegue(withIdentifier: "SegueName", sender: self)
}