Как исправить ошибку: этот класс не является ключевым значением, совместимым с кодировкой для ключевого tableView. '

Я сделал приложение с Table View и Segmented Control, и это мой первый раз. Я использую код и некоторые уроки, но он не работает. Когда я запускаю свое приложение, он разбивается и показывает эту ошибку в журналах:

MyApplication [4928: 336085] * Завершение приложения из-за неперехваченного исключения "NSUnknownKeyException", причина: "[setValue: forUndefinedKey:]: этот класс не является ключевым значением, совместимым с кодировкой для ключевого tableView". * Первый стек вызова броска: (  0 CoreFoundation 0x000000010516fd85 __exceptionPreprocess + 165  1 libobjc.A.dylib 0x0000000105504deb objc_exception_throw + 48  2 CoreFoundation 0x000000010516f9c9 - [NSException raise] + 9  3 Foundation 0x000000010364e19b - [NSObject (NSKeyValueCoding) setValue: forKey:] + 288  4 UIKit 0x0000000103c37d0c - [UIViewController setValue: forKey:] + 88  5 UIKit 0x0000000103e6e7fb - [UIRuntimeOutletConnection connect] + 109  6 CoreFoundation 0x00000001050a9890 - [NSArray makeObjectsPerformSelector:] + 224  7 UIKit 0x0000000103e6d1de - [UINib instantiateWithOwner: options:] + 1864  8 UIKit 0x0000000103c3e8d6 - [UIViewController _loadViewFromNibNamed: bundle:] + 381  9 UIKit 0x0000000103c3f202 - [UIViewController loadView] + 178  10 UIKit 0x0000000103c3f560 - [UIViewController loadViewIfRequired] + 138  11 UIKit 0x0000000103c3fcd3 - [UIViewController view] + 27  12 UIKit 0x000000010440b024 - [_ UIFullscreenPresentationController _setPresentedViewController:] + 87  13 UIKit 0x0000000103c0f5ca - [UIPresentationController initWithPresentedViewController: presentingViewController:] + 133  14 UIKit 0x0000000103c525bb - [UIViewController _presentViewController: withAnimationController: завершение:] + 4002  15 UIKit 0x0000000103c5585c - [UIViewController _performCoordizedPresentOrDismiss: анимированные:] + 489  16 UIKit 0x0000000103c5536b - [UIViewController presentViewController: анимированный: завершение:] + 179  17 UIKit 0x00000001041feb8d __67- [UIStoryboardModalSegueTemplate newDefaultPerformHandlerForSegue:] _ block_invoke + 243  18 UIKit 0x00000001041ec630 - [UIStoryboardSegueTemplate _performWithDestinationViewController: отправитель:] + 460  19 UIKit 0x00000001041ec433 - [UIStoryboardSegueTemplate _perform:] + 82  20 UIKit 0x00000001041ec6f7 - [UIStoryboardSegueTemplate выполнить:] + 156  21 UIKit 0x0000000103aa6a8d - [UIApplication sendAction: to: from: forEvent:] + 92  22 UIKit 0x0000000103c19e67 - [UIControl sendAction: to: forEvent:] + 67  23 UIKit 0x0000000103c1a143 - [UIControl _sendActionsForEvents: withEvent:] + 327  24 UIKit 0x0000000103c19263 - [UIControl touchesEnded: withEvent:] + 601  25 UIKit 0x0000000103b1999f - [UIWindow _sendTouchesForEvent:] + 835  26 UIKit 0x0000000103b1a6d4 - [UIWindow sendEvent:] + 865  27 UIKit 0x0000000103ac5dc6 - [UIApplication sendEvent:] + 263  28 UIKit 0x0000000103a9f553 _UIApplicationHandleEventQueue + 6660  29 CoreFoundation 0x0000000105095301 _CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION_ + 17  30 CoreFoundation 0x000000010508b22c __CFRunLoopDoSources0 + 556  31 CoreFoundation 0x000000010508a6e3 __CFRunLoopRun + 867  32 CoreFoundation 0x000000010508a0f8 CFRunLoopRunSpecific + 488  33 ГрафикаУслуги 0x000000010726dad2 GSEventRunModal + 161  34 UIKit 0x0000000103aa4f09 UIApplicationMain + 171  35 Dhikr 0x0000000101f26282 main + 114  36 libdyld.dylib 0x00000001064c392d start + 1 ) libС++ abi.dylib: завершение с неперехваченным исключением типа NSException

Используемый мной код:

class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {

let foodList:[String] = ["Bread", "Meat", "Pizza", "Other"]
let drinkList:[String] = ["Water", "Soda", "Juice", "Other"]

@IBOutlet weak var mySegmentedControl: UISegmentedControl!
@IBOutlet weak var myTableView: UITableView!

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view.
}

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

    var returnValue = 0

    switch(mySegmentedControl.selectedSegmentIndex) {
    case 0:
        returnValue = foodList.count
        break
    case 1:
        returnValue = drinkList.count
        break
    default:
        break
    }

    return returnValue
}

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let myCell = tableView.dequeueReusableCellWithIdentifier("myCells", forIndexPath: indexPath)

    switch(mySegmentedControl.selectedSegmentIndex) {
    case 0:
        myCell.textLabel!.text = foodList[indexPath.row]
        break
    case 1:
        myCell.textLabel!.text = drinkList[indexPath.row]
        break
    default:
        break
    }

    return myCell
}

@IBAction func segmentedControlActionChanged(sender: AnyObject) {
    myTableView.reloadData()  
}

Вот main.Storyboard

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

Я проверил код много раз, но он не работает. Сначала мне пришлось использовать только Table View, наблюдая за этим уроком (https://www.youtube.com/watch?v=ABVLSF3Vqdg) Я думал, что будет работать с Segmented Control, как в учебнике, Но все равно не работает. Тот же код, та же ошибка. Кто-нибудь может мне помочь?

Ответы

Ответ 1

У вас есть раскадровка, настроенная на ожидание выхода под названием tableView, но фактическое имя выхода myTableView.

Если вы удалите соединение в раскадровке и снова подключитесь к правильному имени переменной, это должно устранить проблему.

Ответ 2

В какой-то момент вы изменили имя своего табличного представления с "tableView" на "myTableView"?