Подтвердить что ты не робот

Swift: приложение завершается из-за неотображенного исключения "NSUnknownKeyException"

Я разрабатываю простую игру, и у меня возникают проблемы, когда загружается конкретный UIViewController (называемый SPSwipes.swift). На экране есть три кнопки: 5, 10 и 25. Когда один выбран, в этой сцене устанавливается переменная , и игрок переходит к основному Игра: GameScene.swift.

Насколько мне известно, переменные распознаются в GameScene, но при открытии представления SPSwipes в симуляторе возникает ошибка 'NSUnknownKeyException'. Это делается путем segue. Ниже приведена ошибка:

2014-11-09 15:32:43.718 Swipe Racer[2644:1620056] *** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<Swipe_Racer.SPSwipes 0x7fbf52d461b0> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key fiveSwipes.'
*** First throw call stack:
(
0   CoreFoundation                      0x000000010c021f35 __exceptionPreprocess + 165
1   libobjc.A.dylib                     0x000000010dd1bbb7 objc_exception_throw + 45
2   CoreFoundation                      0x000000010c021b79 -[NSException raise] + 9
3   Foundation                          0x000000010c4397b3 -[NSObject(NSKeyValueCoding) setValue:forKey:] + 259
4   CoreFoundation                      0x000000010bf6be80 -[NSArray makeObjectsPerformSelector:] + 224
5   UIKit                               0x000000010cd28c7d -[UINib instantiateWithOwner:options:] + 1506
6   UIKit                               0x000000010cb87f98 -[UIViewController _loadViewFromNibNamed:bundle:] + 242
7   UIKit                               0x000000010cb88588 -[UIViewController loadView] + 109
8   UIKit                               0x000000010cb887f9 -[UIViewController loadViewIfRequired] + 75
9   UIKit                               0x000000010cb88c8e -[UIViewController view] + 27
10  UIKit                               0x000000010caa7ca9 -[UIWindow addRootViewControllerViewIfPossible] + 58
11  UIKit                               0x000000010caa8041 -[UIWindow _setHidden:forced:] + 247
12  UIKit                               0x000000010cab472c -[UIWindow makeKeyAndVisible] + 42
13  UIKit                               0x000000010ca5f061 -[UIApplication _callInitializationDelegatesForMainScene:transitionContext:] + 2628
14  UIKit                               0x000000010ca61d2c -[UIApplication _runWithMainScene:transitionContext:completion:] + 1350
15  UIKit                               0x000000010ca60bf2 -[UIApplication workspaceDidEndTransaction:] + 179
16  FrontBoardServices                  0x000000011383b2a3 __31-[FBSSerialQueue performAsync:]_block_invoke + 16
17  CoreFoundation                      0x000000010bf5753c __CFRUNLOOP_IS_CALLING_OUT_TO_A_BLOCK__ + 12
18  CoreFoundation                      0x000000010bf4d285 __CFRunLoopDoBlocks + 341
19  CoreFoundation                      0x000000010bf4d045 __CFRunLoopRun + 2389
20  CoreFoundation                      0x000000010bf4c486 CFRunLoopRunSpecific + 470
21  UIKit                               0x000000010ca60669 -[UIApplication _run] + 413
22  UIKit                               0x000000010ca63420 UIApplicationMain + 1282
23  Swipe Racer                         0x000000010be380de top_level_code + 78
24  Swipe Racer                         0x000000010be3811a main + 42
25  libdyld.dylib                       0x000000010e507145 start + 1
26  ???                                 0x0000000000000001 0x0 + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException
(lldb)

Как вы можете видеть, есть проблема с моей первой переменной: fiveSwipes (и я бы предположил, что будут ошибки с двумя другими). Что означает "этот класс не является ключевым значением, совместимым с кодовым ключом для ключа" 5Swipes "? Как мне его исправить?

Мой файл SPSwipes.swift:

class SPSwipes: UIViewController {

var no_of_swipes = 0

@IBAction func fiveSwipes(sender: AnyObject) {
    no_of_swipes = 5

//and so on

}

Заранее спасибо,

Will

4b9b3361

Ответ 1

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

Ответ 2

Исключение происходит при попытке загрузить представление на основе того, что вы настроили в Interface Builder. Он ищет fiveSwipes и не находит его. Это может произойти, если вы отредактировали код и забыли обновить соединение в IB.

Вы создали соединение в IB с чем-то под названием fiveSwipes, которое не является этой функцией? Возможно, переменная называется fiveSwipes? Способом устранения проблемы было бы найти элемент с плохим соединением в IB и очистить это соединение.

Ответ 3

Для меня это было потому, что у меня было несколько представлений, связанных с несуществующими IBOutlets

Чтобы узнать, как узнать:

1- Нажмите на весь контроллер представления

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

2- перейдите к: Показать инспектор коннекторов

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

Там вы найдете все не подключенные розетки

Ответ 4

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

Наше приложение содержит несколько "Целей", теперь бывает, что ViewController указывает на конкретную цель и только на ту цель, с которой работает этот ViewController. При запуске на другой цели приложение сбой происходит с этой ошибкой.

Итак, для тех, у кого есть несколько "Целей", обязательно проверьте "Модуль" в "Инспекторе идентификации" и убедитесь, что установлен "Наследовать модуль из цели".

screenshot

Ответ 5

Еще одна возможная причина для этого - инициализация вашего контроллера с помощью nibName: bundle: и вы передаете ему неправильное имя nib - еще один нип, который не для этого контроллера. Конечный результат тот же, у вас, вероятно, будет куча @IBOutlets, которые не совпадают между контроллером и nib.