LibС++ abi.dylib: завершение с неперехваченным исключением типа NSException (lldb)

Я программирую приложение в быстром режиме, и когда я запускаю тестовое приложение на симуляторе iPhone, все работает, но потом я пытаюсь прокрутить вправо, что является жестом, который я добавил для него, чтобы перейти к следующей странице (вид 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) 

Ответ 1

CMYR - "его также может произойти, если вы подключили кнопку к IBAction, которая больше не существует (или была переименована)"

Если вы столкнулись с этой проблемой, убедитесь, что вы переходите на Main.storyboard, ПРАВО нажмите на значок желтого окна (контроллер просмотра) в верхней части контура телефона и УДАЛИТЕ розетки с желтыми значками.

Что происходит в таких случаях, вы, вероятно, называетесь действием, а затем переименовываете его. Вам нужно удалить старое имя, и если это будет единственная проблема, начнется прямо в симе!

enter image description here

Ответ 2

Вы случайно установили переменную 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

Ответ 3

В Xcode 9 и Swift 4:

Напечатайте стек исключений, чтобы узнать причину исключения:

  1. Перейти к показу точки останова навигатора.
  2. Добавить (+) Добавить исключительную точку останова.

  3. Выберите новую точку останова, Control-Click, Изменить точку останова.

  4. Добавить действие и ввести: po $ arg1

enter image description here

Ответ 4

Другие решения не работали со мной, здесь мое. Это относится только к Xcode 8 при работе в старом режиме Swift 2.3:

Похоже, Интерфейсный Разработчик пытается переименовать метод, который должен быть подключен к кнопке.

Здесь радар с более подробной информацией.

Решение (обходной путь) - вручную заменить имя параметра метода на _:

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

Изменить на это:

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

Ответ 5

В моем случае я вызывал метод делегата, но метод не был объявлен.

Эта ошибка является общей и может появиться по ряду причин. Убедитесь, что вы не отключили свои журналы, чтобы увидеть, что на самом деле произошло. Включите OS_ACTIVITY_MODE в схемах, если вы отключили его. Вы могли бы отключить его, чтобы предотвратить много ненужных журналов, но они удобны.

Вы также можете отследить причину более подробно, добавив точку прерывания исключения po $arg1. Как уже упоминалось Ахмед-Лотфи

Вот общий контрольный список, который вы можете пройти.

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 for any missing flag in the Proejct Setting (-obj) or any other linker flag etc.

Ответ 6

Это также может быть неправильное имя идентификатора Segue. Например -

performSegueWithIdentifier("wrongSegueName", sender: self)

Ответ 7

Это началось для меня на Xcode 7, и у меня не было точек с желтыми флагами, которые я мог бы удалить.

Единственное, что сработало для меня, это замена этой строки в AppDelegate:

[window addSubview:viewController.view];

в

[window setRootViewController:viewController];

Ответ 8

Для меня проблема была в моем IBAction с UIButton.

Когда вы Ctrl + Drag, чтобы создать IBAction из UIButton, обязательно выберите "UIButton" из раскрывающегося списка "Тип". Выбор по умолчанию AnyObject приводит к сбою приложения при нажатии на UIButton.

введите описание изображения здесь

Ответ 9

Моя ситуация была немного иной, я пытался переходить в UINavigationController, и то, что исправлено для меня, получало основную часть очереди.

Для Objective-C:

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

Для Swift 3:

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

Ответ 10

Это также могут быть сломанные триггерные сегменты, проверьте раскадровку, как только вы снова подключите сегменты или розетку, все должно снова заработать.

Check the Segues

Убедитесь, что Identifier Segue правильный и похож на ваш код.

enter image description here

Ответ 11

Я новичок в Xcode, поэтому мне потребовалось несколько часов, чтобы выяснить проблему, чтобы загрузить файл xls. Я проследовал через большинство образцов кода там, и ни один из них не разрешил показанную ошибку Xcode.

Я обнаружил, что нам нужно указать "Добавить в целевые объекты": отметьте проект для добавления, когда мы импортируем файл xls в Xcode, перетащив его в Project → Supporting Files.

Ответ 12

Я столкнулся с этой проблемой, когда я изменил имя переменной, связанной с одной из моих кнопок. Поэтому имейте это в виду!

Ответ 13

может быть более 1 IBAction для кнопки в вашем контроллере просмотра, попробуйте выяснить их и удалить все предыдущие элементы для этой кнопки в контроллере и создать новую кнопку. Это решит вашу проблему.

Ответ 14

Убедитесь, что вы не динамически применяете относительные ограничения для представления, которое еще не существует в иерархии представлений.

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 был частью иерархии представлений, прежде чем применять к нему относительные ограничения.

Ответ 15

У меня есть эта ошибка следующими двумя способами:

Я получал эту ошибку, когда я входил в другой UIViewController.

ПОТОМУ ЧТО Я ошибался, я подклассифицировал другой класс из UITabBarController и получал эту ошибку.

Как я понял? Я подклассифицировался от UIViewController, и я больше не сбой:)


Я не хотел использовать раскадровку. Поэтому я удалил его. Однако я забыл удалить его ссылку в настройках проекта. Я просто нажал на проект → Общие → Информация о развертывании → и затем я установил Основной интерфейс в черное пространство. (Ранее он был установлен в основное положение)

Как вы можете видеть, в обеих ситуациях вы получаете ошибку для доступа к некоторому объекту, который существует...

Ответ 16

Я собираюсь добавить свою проблему в список возможных решений в случае, если кто-то еще случится в этом потоке.

Идентификатор ячейки TableView. Прежде всего, убедитесь, что у вашей ячейки есть идентификатор. Во-вторых, убедитесь, что вы ссылаетесь на этот идентификатор, когда вы деактивируете ячейку.

Ответ 17

Swift 4:

Я получал эту ошибку из-за изменения в UIVisualEffectView api. В Swift 3 это было нормально: myVisuallEffectView.addSubview(someSubview)

Но в Swift 4 мне пришлось изменить его на это: myVisualEffectView.contentView.addSubview(someSubview)

Ответ 18

У меня была такая же ошибка, когда у меня была опечатка для одного из представлений при построении ограничений с использованием визуального форматера. Я надеюсь, что это поможет кому-то... или мне снова однажды.

Ответ 19

Также может быть полезно создать точку прерывания исключения в Debug-> Точки останова. Затем мы надеемся, что отладчик остановится на той строке кода, где находится проблема.

Ответ 21

Для Swift 2.3

Кажется, это ошибка с Xcode 8 и Swift 2.3, если вы подключаете действие кнопки к вашему коду через раскадровку, убедитесь, что Xcode не переименовал действие, для меня это добавление withSender: в конце методов, так что я делаю это для моего кода и переименования метода в соответствии с тем, который был написан Xcode.

Для любой другой версии проверьте правильный ответ.

Ответ 22

В моем случае Xcode 8.2.1 у меня был вид View Kit в контроллере представления. Поэтому я пошел в

Фазы сборки > Ссылка на двоичные файлы с библиотеками

и добавил MapKit.framework, тогда это было хорошо.

Я думаю, что это применимо и к другим представлениям, которые требуют фреймворка.

P.S. Запуск на iOS 9 сказал мне, что была проблема с Map Kit View, в то время как на iOS 10 мне ничего не сказали!

Ответ 23

Для меня работало только решение "drop armageddon":

  • удалить приложение с устройства
  • чистый проект
  • запустить новую установку на устройстве

Ответ 24

В моем случае XCode устал и не смог запустить приложение с этим сообщением из-за неудачного утверждения (которое было установлено нашим кодом).

Работа на другом устройстве показала ошибку утверждения, которую мы смогли исправить, и все вернулось к нормальному.

Ответ 25

В моем случае это был InterfaceBuilder. Я скопировал несколько просмотров из другого ViewController, который испортил ограничения.

В InterfaceBuilder у меня была ошибка красной стрелки на ViewController.

Во время выполнения приложение разбилось.

Ответ 26

В моем случае приложение потерпело крах, потому что я не установил целевое членство в раскадровке.

Ответ 27

В моем случае Build Settings проекта Build Settings содержали несколько несуществующих каталогов для Framework Search Paths и Library Search Paths.

Ответ 28

У меня было две проблемы:

1) У моей цели не было контроллера просмотра, который использовался в файле раскадровки.

2) Моей раскадровке было около 3 лет, мне пришлось заново создать один из контроллеров представления в контроллере панели вкладок (на нем был только UITextField, и я до сих пор не знаю, почему он не работал)

Ответ 29

Еще одна возможная причина:

В моем случае у меня был xib и он вызывал Bundle.main.loadNibNamed(... в этот момент он Bundle.main.loadNibNamed(.... Все мои IBOutlets и IBActions казались в порядке. В конце я заметил, что nib действительно загружается, но потом, когда Я попытался получить доступ к первому (и единственному) представлению (nib.first), которое не работало. На самом деле nib.count возвращал очень большое целое число (max int?) Вместо ожидаемого 1 Я попытался повторно добавить вид, но все же не повезло.

В конце я удалил весь файл xib и запустил снова (но я сохранил некоторые представления в своем буфере обмена, чтобы я мог вставить их вместо того, чтобы заново xib их).

Это сработало!

Ответ 30

Это может произойти, если у вас есть таблица и вы забыли назначить классу UITableViewDelegate и UITableViewDataSource