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


186

앱을 신속하게 프로그래밍하고 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) 

8
더 이상 존재하지 않는 NIB에 무언가를 연결했을 가능성이 큽니다. 전환하려는 뷰가로드 될 때 충돌이 발생한 것 같습니다. 인스펙터 패널 (오른쪽)에있는 모든 콘센트를 확인한 후 콘센트가 있는지 확인합니다. 더 이상 존재하지 않거나 이름이 변경된 IBAction에 버튼을 연결 한 경우에도 발생할 수 있습니다.
cmyr

사용되지 않는 것이 없으며 여전히 오류가 발생합니다.
Nick

Swift 2.3 레거시 모드에서 Xcode 8을 사용하는 경우 다음 답변을 참조하십시오. stackoverflow.com/a/39548326/5175709
Honey

6
일반적으로 항상 콘솔로 이동하여 히트 cmmd + F하면 콘솔 내에서 검색 하고 잡히지 않은 예외로 인해 앱 종료를 검색 할 수 있습니다 . 정확히 1 줄 후에 이유 가 표시됩니다 . 이는 앱이 충돌 한 이유를 알려줍니다. (예,이 오류가 너무 많이 발생했습니다 :)
Honey

1
디버그-> 중단 에서 예외 중단 점 을 작성하는 것도 도움이 될 수 있습니다 . 그런 다음 디버거는 문제가있는 코드 줄에서 중지해야합니다.
척 Boris

답변:


392

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

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

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

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


9
좋은 답변, 감사합니다! 이것은 XCode의 심각한 결함입니다. 오류 처리에는 많은 개발이 필요합니다.
HyperionX

3
또한 노란색 삼각형에 문제가 있었지만 해당 삼각형 만 수정해도 충돌이 해결되지 않았습니다. :(
Andrej

이것은 @IBOutlet의 이름을 바꾼 후에 나에게 일어났습니다
Mohammed Fadhl

스토리 보드가 대상에 포함되어 있는지 다시 확인해야합니다.
hoangtuanfithou

그냥 스토리 보드에 연결 Inspector에서 아웃렛과 액션 참조를 검토
알바 아궤로에게

95

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


1
감사! 나는 그 때문에 충돌 이유를 보지 못했다 "인식 할 수없는 선택기 클래스로 전송"
데니스 Kutlubaev

14
슬픔, 애플 수정되지 않은 OS 버그로 인해이 기능이 켜지고 실제로 중요한 디버깅 메시지가 누락됩니다. 잘 잡아요, 시데 쉬
Nate

감사합니다.이 변수를 얼마 전에 추가하고 비활성화하는 것을 잊었습니다. 니가 끝냈어!
로드리고 레시오

1
와우 고마워, 내가 없으면 내 릴 버그를 잡은 적이 없어. 그래, 모두 자신의 버그 스크롤 디버그 정보 애플 나사
ShadowLightz

과연. 감사!
Senocico Stelian

86

Xcode 9 및 Swift 4에서 :

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

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

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

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

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


3
예외 처리에 대해 어떤 종류의 조치를 취해야하는지에 대한 다양한 옵션이 있으므로 조치는 '디버거 명령'이어야합니다. 그러나 정말 도움이되었습니다! 감사!
Todd

최고의 답변! 때로는 추가 정보없이 포드 또는 라이브러리 에서이 오류가 발생했습니다. 몇 달 전에 귀하의 답변을 읽은 후 여러 번 사용했으며 매번 도움이되었습니다.
user8675

1
그 대답은 "어떻게 엑스 코드 디버거를 작동하게하는 방법"이라고 지적한다
부두 조르지오 Misley

확실히 가장 좋은 대답은 많은 도움이되었습니다.
Okan Kurtuluş

8

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

이 오류는 일반적이며 여러 가지 이유로 나타날 수 있습니다. 실제로 무슨 일이 있었는지 확인하기 위해 로그를 비활성화하지 않았는지 확인하십시오. 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.

1
좋은 목록! 필자의 경우 사용자 지정 셀의 식별자를 등록하는 것을 잊었습니다. 잊어 버리기 쉬운 간단한 항목이므로 목록에 추가하는 것이 좋습니다.
luismgb

7

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

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

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

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

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

이것으로 변경하십시오 :

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

5

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

performSegueWithIdentifier("wrongSegueName", sender: self)

4

내 상황은 조금 달랐고 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)
}

3

이것은 Xcode 7에서 나에게 발생하기 시작했으며 삭제할 수있는 노란색 플래그가있는 콘센트가 없었습니다.

나를 위해 일한 유일한 것은 AppDelegate 에서이 줄을 바꾸는 것입니다.

[window addSubview:viewController.view];

에:

[window setRootViewController:viewController];

3

나에게 문제는 UIButton을 사용하는 IBAction에 있었다.

UIButton에서 IBAction을 작성하기 위해 Ctrl + 드래그하는 경우 유형 드롭 다운에서 "UIButton"을 선택하십시오. 기본적으로 AnyObject를 선택하면 UIButton을 누를 때 앱이 중단됩니다.

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


Action Type을 AnyObject로 설정했지만 제 경우에는 작동하지 않습니다.
Andrej

내 게시물을 읽으면 AnyObject가 작동하지 않는다는 것을 알았습니다.
Chris Livdahl

3

또한 트리거 된 트리거 된 Segues 일 수 있습니다. Segues 또는 콘센트 를 다시 연결 하면 즉시 작동해야합니다.

세 구스 확인

IdentifierSegue의 코드 가 정확하고 코드 와 유사한 지 확인하십시오 .

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


2

내 버튼 중 하나에 연결된 변수의 이름을 변경하면이 문제가 발생했습니다. 따라서 명심하십시오!


2

Xcode를 처음 사용하므로 xls 파일을로드하는 데 문제를 파악하는 데 몇 시간이 걸렸습니다. 나는 대부분의 샘플 코드를 따라 갔으며 그중 어느 것도 표시된 Xcode 오류를 해결하지 못했습니다.

내가 찾은 해결책은 프로젝트-> 지원 파일로 드래그 앤 드롭하여 xls 파일을 Xcode로 가져올 때 '대상에 추가 :'을 추가해야한다는 것입니다.


1

뷰 컨트롤러의 버튼에 대해 하나 이상의 IBAction이있을 수 있습니다. 컨트롤러에서 해당 버튼을 찾아 해당 버튼의 모든 이전 항목을 제거하고 새 버튼을 만드십시오. 문제가 해결됩니다.


1

뷰 계층 구조에 아직없는 뷰에 상대 구속 조건을 동적으로 적용하지 않아야합니다.

UIView *bottomView = [[UIView alloc] initWithFrame:CGRectZero];
[self.view addSubview:bottomView];

bottomConstraint = [NSLayoutConstraint constraintWithItem:bottomView
                                                attribute:NSLayoutAttributeBottom
                                                relatedBy:NSLayoutRelationEqual
                                                   toItem:self.view
                                                attribute:NSLayoutAttributeBottom
                                               multiplier:1
                                                 constant:0];
bottomConstraint.active = YES;

위의 예에서 bottomView 는 상대 제약 조건을 적용하기 전에 뷰 계층의 일부로 만들어졌습니다.


1

다음 두 가지 방법으로이 오류가 발생했습니다.

다른 UIViewController를 사용할 때이 오류가 발생했습니다.

그러나 실수로 다른 클래스를 서브 클래스 화 UITabBarController하고이 오류가 발생했습니다.

어떻게 고쳤습니까? 나는 하위 클래스에서 UIViewController더 이상 충돌하지 않았습니다. :)


스토리 보드를 사용하고 싶지 않았습니다. 그래서 삭제했습니다. 그러나 프로젝트 설정 에서 참조를 삭제하는 것을 잊었습니다. . 방금 프로젝트 >> 일반 >> 배포 정보 >>를 클릭 한 다음 주 인터페이스를 검은 색 공간으로 설정했습니다. (이전에 main으로 설정 됨)

두 상황 모두에서 알 수 있듯이 존재하는 일부 객체에 액세스하는 데 오류가 발생합니다 ...


1

이 스레드에서 다른 사람이 발생할 경우 가능한 해결책 목록에 내 문제를 추가하려고합니다.

TableView 셀 식별자 먼저 셀에 식별자가 있는지 확인하십시오. 둘째, 셀을 대기열에서 제외시킬 때 해당 식별자를 참조하고 있는지 확인하십시오.


1

스위프트 4 :

UIVisualEffectView API의 변경으로 인해이 오류가 발생했습니다. 스위프트 3에서는 다음 작업을 수행해도됩니다. myVisuallEffectView.addSubview(someSubview)

그러나 Swift 4에서는 이것을 다음과 같이 변경해야했습니다. myVisualEffectView.contentView.addSubview(someSubview)


1

비주얼 포맷터를 사용하여 제약 조건을 작성하는 동안 뷰 중 하나에 오타가있을 때도 동일한 오류가 발생했습니다. 언젠가 누군가에게 도움이 되길 바랍니다.




0

필자의 경우 Xcode 8.2.1 에서는 뷰 컨트롤러에 맵 키트 뷰 가 있습니다. 그래서 나는 갔다

빌드 단계> 바이너리를 라이브러리와 연결

추가 MapKit.framework하면 괜찮습니다.

나는 이것이 프레임 워크가 필요한 다른 견해에도 적용될 것이라고 생각합니다.

iOS 9에서 PS를 실행하면 Map Kit View에 문제가 있다고 말했지만 iOS 10에서는 아무 것도 말하지 않았습니다!


0

"드롭 아마겟돈"솔루션 만이 저에게 효과적이었습니다.

  • 기기에서 앱 제거
  • 깨끗한 프로젝트
  • 장치에서 새로 설치

0

필자의 경우 XCode가 어설 션 실패 (코드에서 설정)로 인해 피곤 하고이 메시지로 앱을 시작하지 못했습니다.

다른 장치에서 실행하면 어설 션 오류가 발생하여 수정할 수 있었고 모든 것이 정상으로 돌아 왔습니다.


0

스위프트 2.3

이것은 Xcode 8 및 Swift 2.3의 버그 인 것 같습니다. 스토리 보드를 통해 버튼 액션을 코드에 연결하는 경우 Xcode가 액션의 이름을 바꾸지 않았는지 확인하십시오. 내에게는 withSender를 추가하고 있습니다. 메서드 끝에 그래서 내가하는 일은 내 코드로 가서 Xcode가 작성한 것과 일치하도록 메소드의 이름을 바꾸는 것입니다.

다른 버전의 경우 정답을 확인하십시오.


0

제 경우에는 InterfaceBuilder였습니다. 다른 ViewController에서 일부 뷰를 복사하여 제약 조건을 엉망으로 만들었습니다.

InterfaceBuilder에서 ViewController에 빨간색 화살표 오류가 발생했습니다.

실행하는 동안 앱이 중단되었습니다.


0

필자의 경우 스토리 보드의 대상 멤버십을 설정하지 않아 앱이 중단되었습니다.


0

필자의 경우 프로젝트 Build Settings에는 Framework Search Paths및에 대한 존재하지 않는 디렉토리가 일부 포함 되어 Library Search Paths있습니다.


0

두 가지 문제가있었습니다.

1) 타겟에 스토리 보드 파일에 사용 된 뷰 컨트롤러가 포함되어 있지 않습니다.

2) 내 스토리 보드는 약 3 세였습니다. 탭 막대 컨트롤러에서 뷰 컨트롤러 중 하나를 처음부터 다시 작성해야했습니다 (UITextField 만 있었고 여전히 작동하지 않는 이유를 모르겠습니다)


0

또 다른 가능한 원인 :

제 경우에는 충돌이 발생한 시점 xib에 전화 Bundle.main.loadNibNamed(...를 걸었습니다. 내 모든 IBOutletsIBActions같았다 잘. 결국 나는 nib실제로로드되고 있음을 알았지 만 첫 번째 (및 유일한)보기 ( nib.first) 에 액세스하려고 시도했지만 작동하지 않았습니다. 실제로 nib.count예상 대신 매우 큰 정수 (max int?)를 반환했습니다.1 . 나는보기를 다시 추가하려고했지만 여전히 운이 없다.

결국 전체 xib파일을 삭제하고 다시 시작했습니다 (그러나 다시보기 대신 붙여 넣을 수 있도록 클립 보드에 일부 뷰를 유지했습니다).

이것은 효과가 있었다!


0

이것은 테이블이 있고 UITableViewDelegate 및 UITableViewDataSource를 클래스에 할당하는 것을 잊어 버린 경우 발생할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.