libc ++ abi.dylib: chấm dứt với ngoại lệ chưa được loại của NSException (lldb)


185

Tôi đang lập trình một ứng dụng nhanh chóng và khi tôi chạy ứng dụng thử nghiệm trên trình giả lập iPhone, mọi thứ đều hoạt động, nhưng sau đó tôi cố gắng vuốt sang phải, đó là một cử chỉ mà tôi đã thêm để đi đến Trang tiếp theo (Xem Trình điều khiển Hai) nó gặp sự cố và hiển thị báo cáo lỗi này trong nhật ký giao diện điều khiển.

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) 

7
Rất có thể bạn đã kết nối một thứ gì đó trong NIB không còn tồn tại. Có vẻ như sự cố là khi chế độ xem bạn đang cố chuyển sang đang được tải. Tôi sẽ kiểm tra tất cả các cửa hàng trong khung thanh tra (bên phải) và đảm bảo chúng có mặt? Điều này cũng có thể xảy ra nếu bạn kết nối một nút với IBAction không còn tồn tại nữa (hoặc đã được đổi tên)
cmyr

Không có gì không được sử dụng và nó vẫn gây ra lỗi cho tôi.
Nick

Nếu bạn đang sử dụng Xcode 8 với chế độ kế thừa Swift 2.3 thì hãy xem câu trả lời sau: stackoverflow.com/a/39548326/5175709
Mật ong

6
Nói chung, luôn luôn đi tới bảng điều khiển, nhấn cmmd + Fđể bạn có thể tìm kiếm bên trong bảng điều khiển và tìm kiếm ứng dụng Chấm dứt do ngoại lệ chưa được phát hiện , chính xác là 1 dòng sau đó bạn sẽ thấy lý do: cho bạn biết lý do ứng dụng của bạn bị sập. (vâng, tôi đã gặp lỗi này quá nhiều lần :)
Honey

1
Nó cũng có thể hữu ích để tạo Điểm dừng ngoại lệ trong Gỡ lỗi-> Điểm dừng. Trình gỡ lỗi sau đó hy vọng dừng lại trên dòng mã nơi xảy ra sự cố.
Chuck Boris

Câu trả lời:


391

CMYR - "điều này cũng có thể xảy ra nếu bạn kết nối một nút với IBAction không còn tồn tại nữa (hoặc đã được đổi tên)"

Nếu bạn đang gặp phải vấn đề này, hãy đảm bảo rằng bạn truy cập Main.storyboard, RIGHT nhấp vào biểu tượng hộp màu vàng (xem bộ điều khiển) ở đầu phác thảo điện thoại và XÓA (các) ổ cắm bằng cờ vàng.

Điều xảy ra trong những trường hợp như thế này là bạn có thể đặt tên cho một hành động, sau đó đổi tên nó. Bạn cần xóa tên cũ và nếu đó là vấn đề duy nhất sẽ bắt đầu ngay trong sim!

nhập mô tả hình ảnh ở đây


9
Câu trả lời tuyệt vời, cảm ơn bạn! Đây là một lỗ hổng SERIOUS với XCode. Việc xử lý lỗi cần rất nhiều sự phát triển.
HyperionX

3
Tôi cũng gặp vấn đề với hình tam giác màu vàng, nhưng chỉ sửa những hình tam giác đó đã không giải quyết được sự cố cho tôi. :(
Andrej

Điều này đã xảy ra với tôi sau khi đổi tên thành @IBOutlet
Mohammed Fadhl

Nên kiểm tra lại để chắc chắn rằng bảng phân cảnh có được đưa vào Target hay không
hoangtuanfithou

Chỉ cần xem lại các cửa hàng và tham chiếu hành động trong Thanh tra kết nối trên bảng phân cảnh
Álvaro Agüero

95

Bạn có đặt biến OS_ACTIVITY_MODE bất kỳ không? Để kiểm tra xem bạn đã đặt biến này chưa (và tắt nó đi), trong Xcode 9, hãy làm như sau:

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
Cảm ơn! Tôi đã không thấy lý do sự cố vì điều đó: "bộ chọn không được nhận dạng được gửi đến lớp"
Denis Kutlubaev

14
Thật đau buồn, Apple. Các lỗi hệ điều hành không trộn lẫn của chúng buộc chúng ta phải bật nó lên, và sau đó chúng ta bỏ lỡ các thông báo gỡ lỗi quan trọng thực sự. Bắt tốt đẹp, Siddhesh.
Nate

Cảm ơn, tôi đã thêm biến này một thời gian trước đó và quên vô hiệu hóa nó. Bạn đóng đinh nó!
Rodrigo Recio

1
Wow cảm ơn, không có điều đó tôi không bao giờ bắt gặp lỗi lil của tôi. Vâng, vặn Apple cho tất cả thông tin gỡ lỗi cuộn lỗi của họ
ShadowLightz

Thật. Cảm ơn!
Senocico Stelian

85

Trong Xcode 9 và Swift 4:

In ngăn xếp ngoại lệ để biết lý do của ngoại lệ:

  1. Đi để hiển thị điểm điều hướng.
  2. Thêm (+) Thêm điểm dừng ngoại lệ.

  3. Chọn điểm dừng mới, Nhấp chuột điều khiển, Chỉnh sửa Điểm dừng.

  4. Thêm hành động và nhập: po $ arg1

nhập mô tả hình ảnh ở đây


3
Cần lưu ý rằng Hành động cần phải là một 'Lệnh gỡ lỗi' vì có nhiều lựa chọn khác nhau về loại Hành động sẽ thực hiện khi ném ngoại lệ. Nhưng nó thực sự giúp tôi! Cảm ơn!
Todd

Câu trả lời tốt nhất! Đôi khi tôi gặp lỗi này sâu trong các nhóm hoặc lib mà không có thêm thông tin. Sau khi tôi đọc câu trả lời của bạn vài tháng trước, tôi đã sử dụng nó nhiều lần và tôi đã giúp tôi mọi lúc.
dùng8675

1
Câu trả lời đó nên được chỉ ra là "cách làm cho trình gỡ lỗi Xcode hoạt động"
Cầu tàu Giorgio Misley

Câu trả lời chắc chắn tốt nhất, nó đã giúp tôi rất nhiều.
Okan Kurtuluş

8

Trong trường hợp của tôi, tôi đã gọi một phương thức ủy nhiệm nhưng phương thức này không được khai báo.

Lỗi này là chung chung và có thể xuất hiện bởi một số lý do. Hãy chắc chắn rằng bạn không vô hiệu hóa Nhật ký của bạn để thực sự thấy những gì đã xảy ra. Kích hoạt OS_ACTIVITY_MODE trong các lược đồ nếu bạn đã tắt nó. Bạn có thể đã vô hiệu hóa nó để ngăn chặn rất nhiều nhật ký không liên quan nhưng chúng rất tiện dụng.

Bạn cũng có thể theo dõi nguyên nhân chi tiết hơn bằng cách thêm một điểm dừng ngoại lệ po $arg1. Như đã được đề cập bởi Ahmed-Lotfi

Dưới đây là một danh sách kiểm tra phổ biến mà bạn có thể đi qua.

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
Danh sách tốt đẹp! Trong trường hợp của tôi, tôi đã quên đăng ký định danh ô tùy chỉnh của mình. Nó có thể đáng để thêm vào danh sách của bạn vì nó có thể là một điều đơn giản mà khá dễ quên.
luismgb

7

Các giải pháp khác không hoạt động với tôi, đây là của tôi. Nó chỉ áp dụng cho Xcode 8 khi chạy ở chế độ kế thừa Swift 2.3 :

Có vẻ như Interface Builder đang cố gắng đổi tên phương thức nên được nối với nút.

Đây là một radar với nhiều chi tiết hơn.

Giải pháp (cách giải quyết) là thay thế thủ công tên tham số phương thức thành _:

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

Thay đổi thành này:

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

5

Nó cũng có thể sai Tên định danh phân đoạn. Ví dụ -

performSegueWithIdentifier("wrongSegueName", sender: self)

4

Tình huống của tôi hơi khác một chút, tôi đã cố gắng tách ra thành một UINavigationController, và điều cố định nó cho tôi là lấy phần xếp hàng chính.

Đối với Mục tiêu-C:

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

Dành cho Swift 3:

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

3

Điều này bắt đầu xảy ra với tôi trên Xcode 7 và tôi không có cửa hàng nào có cờ vàng mà tôi có thể xóa.

Điều duy nhất làm việc cho tôi là thay thế dòng này trong AppDelegate:

[window addSubview:viewController.view];

đến:

[window setRootViewController:viewController];

3

Đối với tôi, vấn đề là ở IBAction của tôi với một UIButton.

Khi bạn Ctrl + Kéo để tạo IBAction từ UIButton, hãy đảm bảo chọn "UIButton" từ danh sách thả xuống Loại. Lựa chọn mặc định của AnyObject khiến ứng dụng bị sập khi bạn nhấn vào nút UIB.

nhập mô tả hình ảnh ở đây


Tôi đã đặt Loại hành động thành AnyObject, nhưng trong trường hợp của tôi, nó không hoạt động.
Andrej

Nếu bạn đọc bài viết của tôi, tôi đưa ra quan điểm rằng AnyObject không hoạt động, như bạn đã tìm thấy.
Chris Livdahl

3

Nó cũng có thể là một Phân đoạn kích hoạt bị hỏng, hãy kiểm tra bảng phân cảnh của bạn, ngay khi bạn kết nối lại các phân đoạn hoặc ổ cắm, tất cả sẽ hoạt động trở lại.

Kiểm tra các phân đoạn

Đảm bảo rằng IdentifierSegue là chính xác và tương tự như của bạn .

nhập mô tả hình ảnh ở đây


2

Tôi gặp vấn đề này khi tôi thay đổi tên của biến được kết nối với một trong các nút của tôi. Vì vậy, hãy ghi nhớ điều đó!


2

Tôi mới sử dụng Xcode, vì vậy tôi phải mất vài giờ để tìm ra vấn đề để tải tệp xls. Tôi đã theo dõi qua hầu hết các mã mẫu trên đó và không ai trong số họ giải quyết được Xcode lỗi được hiển thị.

Giải pháp tôi tìm thấy là chúng ta cần chỉ định 'Thêm vào mục tiêu:' đánh dấu vào dự án để thêm, khi chúng ta nhập tệp xls vào Xcode bằng cách kéo và thả vào Project -> Tệp hỗ trợ.


1

có thể có nhiều hơn 1 IBAction cho một nút trong trình điều khiển chế độ xem của bạn, hãy thử tìm ra các nút đó và xóa tất cả các mục trước đó cho nút đó trong trình điều khiển của bạn và tạo nút mới. Nó sẽ giải quyết vấn đề của bạn.


1

Hãy chắc chắn rằng bạn không áp dụng động các ràng buộc tương đối cho một khung nhìn chưa có trong phân cấp khung nhìn.

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;

Trong ví dụ trên, bottomView đã được tạo thành một phần của hệ thống phân cấp khung nhìn trước khi áp dụng các ràng buộc tương đối trên nó.


1

Tôi đã gặp lỗi này theo 2 cách sau:

Tôi đã gặp lỗi này khi tôi đang đẩy vào một UIViewControll khác.

TUY NHIÊN do nhầm lẫn, tôi đã phân lớp khác UITabBarControllervà nhận được lỗi này.

Làm thế nào tôi có nó cố định? Tôi đã phân lớp từ UIViewControllervà tôi không còn gặp sự cố nữa :)


Tôi không muốn sử dụng bảng phân cảnh. Vì vậy, tôi đã xóa nó. Tuy nhiên, tôi quên xóa tham chiếu của nó trong cài đặt Project . Tôi vừa nhấp vào dự án >> Chung >> Thông tin triển khai >> và sau đó tôi đặt Giao diện chính thành không gian màu đen. (Trước đây nó được đặt thành chính)

Như bạn có thể thấy trong cả hai tình huống bạn đang gặp lỗi khi truy cập một số đối tượng tồn tại ...


1

Tôi sẽ thêm vấn đề của mình vào danh sách các giải pháp khả thi trong trường hợp có ai khác xảy ra với chủ đề này.

Định danh ô TableView. Trước hết hãy chắc chắn rằng tế bào của bạn có một định danh. Thứ hai, đảm bảo bạn đang tham chiếu mã định danh đó khi bạn hủy bỏ ô.


1

Swift 4 :

Tôi đã nhận được lỗi này vì một sự thay đổi trong api UIVisualEffectView. Trong Swift 3, bạn có thể làm điều này: myVisuallEffectView.addSubview(someSubview)

Nhưng trong Swift 4 tôi đã phải thay đổi nó thành thế này: myVisualEffectView.contentView.addSubview(someSubview)


1

Tôi đã gặp lỗi tương tự khi tôi mắc lỗi đánh máy cho một trong các khung nhìn trong khi xây dựng các ràng buộc bằng cách sử dụng trình định dạng trực quan. Tôi hy vọng điều đó sẽ giúp ai đó ... hoặc tôi một lần nữa vào một ngày nào đó.




0

Đối với trường hợp của tôi, Xcode 8.2.1 , tôi đã có Chế độ xem Bộ bản đồ trong trình điều khiển chế độ xem. Vì vậy, tôi đã đi đến

Xây dựng giai đoạn> Liên kết nhị phân với thư viện

và thêm vào MapKit.framework, sau đó nó là tốt.

Tôi nghĩ rằng điều này cũng sẽ áp dụng cho các quan điểm khác đòi hỏi khuôn khổ.

PS Running trên iOS 9 nói với tôi rằng có một vấn đề về Map Kit View, trong khi trên iOS 10 không nói gì với tôi!


0

Chỉ có giải pháp "drop armageddon" làm việc cho tôi:

  • xóa ứng dụng khỏi thiết bị
  • dự án sạch
  • chạy cài đặt mới trên thiết bị

0

Trong trường hợp của tôi, XCode đã cảm thấy mệt mỏi và không khởi động được ứng dụng với thông báo này, do lỗi xác nhận (được đặt bởi mã của chúng tôi).

Chạy trên một thiết bị khác cho thấy lỗi xác nhận mà chúng tôi có thể khắc phục và mọi thứ trở lại bình thường.


0

Dành cho Swift 2.3

Đây có vẻ là một lỗi với Xcode 8 và Swift 2.3, nếu bạn đang kết nối hành động nút với mã của mình qua bảng phân cảnh, hãy chắc chắn rằng Xcode không đổi tên hành động, đối với tôi, đó là thêm withSender: vào cuối các phương thức , vì vậy những gì tôi làm là đi tới mã của mình và đổi tên phương thức để khớp với mã Xcode đã viết.

Đối với bất kỳ phiên bản khác kiểm tra câu trả lời chính xác.


0

Trong trường hợp của tôi, đó là InterfaceBuilder. Tôi đã sao chép một số Chế độ xem từ một ViewContoder khác làm rối tung các ràng buộc.

Trong InterfaceBuilder tôi đã gặp lỗi mũi tên màu đỏ trên ViewContoder.

Trong quá trình thực thi, ứng dụng bị sập.


0

Trong trường hợp của tôi, ứng dụng bị sập vì tôi không đặt thành viên mục tiêu của bảng phân cảnh.


0

Trong trường hợp của tôi, dự án Build Settingschứa một số thư mục không tồn tại cho Framework Search PathsLibrary Search Paths.


0

Tôi đã có hai vấn đề:

1) Mục tiêu của tôi không có bộ điều khiển xem bao gồm được sử dụng trong tệp bảng phân cảnh.

2) Bảng phân cảnh của tôi khoảng 3 tuổi, tôi phải tạo lại một trong những bộ điều khiển xem trong bộ điều khiển thanh tab từ đầu (nó chỉ có UITextField và tôi vẫn không biết tại sao nó không hoạt động)


0

Một nguyên nhân có thể khác:

Trong trường hợp của tôi, tôi đã có một xibvà đang gọi Bundle.main.loadNibNamed(...vào thời điểm nó bị rơi. Tất cả của tôi IBOutletsIBActionscó vẻ tốt. Cuối cùng, tôi nhận thấy rằng nibthực sự đang tải, nhưng sau đó khi tôi cố truy cập vào chế độ xem đầu tiên (và duy nhất) ( nib.first), nó không hoạt động. Trong thực tế, nib.countđã trả về một số nguyên rất lớn (max int?), Thay vì dự kiến 1. Tôi đã thử thêm lại chế độ xem, nhưng vẫn không gặp may.

Cuối cùng, tôi đã xóa toàn bộ xibtập tin và bắt đầu lại (nhưng tôi vẫn giữ một số lượt xem trong bảng tạm để tôi có thể dán chúng thay vì tạo lại chúng một lần nữa).

Điều này đã làm việc!


0

Điều này có thể xảy ra nếu bạn có một bảng và quên gán UITableViewDelegate và UITableViewDataSource cho lớp

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.