Search code examples
iosxcodeswift3

App is crashing with error: "this class is not key value coding-compliant for the key tableView". How to fix?


I have 10 connected UIButtons with different tags in the buttonPressed IBAction and my segue has the ID "GoToDetailVC"

import UIKit

class MainVC: UIViewController {

var buttonNumber: Int?

override func viewDidLoad() {
    super.viewDidLoad()
}
override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
}

@IBAction func buttonPressed(sender: AnyObject) {
    buttonNumber = sender.tag
    performSegue(withIdentifier: "GoToDetailVC", sender: sender.tag)
}

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if let destination = segue.destination as? DetailVC {
        if let btnNumber = sender as? Int {
            destination.buttonNumber = btnNumber
        }
    }
}
}

And then I want to replace the headerLabel text with the number from the Tag

import UIKit

class DetailVC: UIViewController {

@IBOutlet weak var headerLabel: UILabel!

private var _buttonNumber: Int!

var buttonNumber: Int {
    get {
        return _buttonNumber
    }   set {
        _buttonNumber = newValue
    }
}

override func viewDidLoad() {
    super.viewDidLoad()
    headerLabel.text = "\(_buttonNumber!)"
}
override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
}

@IBAction func dismissView(_ sender: UIButton) {
    dismiss(animated: true, completion: nil)        
}
}

It is crashing and produces this message

2016-12-31 12:36:36.439 Core Geometry[2638:539019] *** Terminating app     due to uncaught exception 'NSUnknownKeyException', reason:     '[<Core_Geometry.DetailVC 0x7fc55251aea0> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key tableView.'
*** First throw call stack:
(
    0   CoreFoundation                      0x0000000108a67d4b __exceptionPreprocess + 171
1   libobjc.A.dylib                     0x000000010615b21e objc_exception_throw + 48
2   CoreFoundation                      0x0000000108a67c99 -[NSException raise] + 9
3   Foundation                          0x0000000105c699df -[NSObject(NSKeyValueCoding) setValue:forKey:] + 291
4   UIKit                               0x00000001067be293 -[UIViewController setValue:forKey:] + 88
5   UIKit                               0x0000000106a3279e -[UIRuntimeOutletConnection connect] + 109
6   CoreFoundation                      0x0000000108a0c9e0 -[NSArray makeObjectsPerformSelector:] + 256
7   UIKit                               0x0000000106a31122 -[UINib instantiateWithOwner:options:] + 1867
8   UIKit                               0x00000001067c49c5 -[UIViewController _loadViewFromNibNamed:bundle:] + 386
9   UIKit                               0x00000001067c52e7 -[UIViewController loadView] + 177
10  UIKit                               0x00000001067c561c -[UIViewController loadViewIfRequired] + 201
11  UIKit                               0x00000001067c5e70 -[UIViewController view] + 27
12  UIKit                               0x00000001070866a4 -[_UIFullscreenPresentationController _setPresentedViewController:] + 87
13  UIKit                               0x00000001067a0702 -[UIPresentationController initWithPresentedViewController:presentingViewController:] + 141
14  UIKit                               0x00000001067d8e97 -[UIViewController _presentViewController:withAnimationController:completion:] + 3956
15  UIKit                               0x00000001067dc26b -[UIViewController _performCoordinatedPresentOrDismiss:animated:] + 530
16  UIKit                               0x00000001067dbd51 -[UIViewController presentViewController:animated:completion:] + 179
17  UIKit                               0x0000000106de9717 __74-[UIStoryboardPresentationSegueTemplate newDefaultPerformHandlerForSegue:]_block_invoke + 133
18  UIKit                               0x0000000106df91dd -[UIStoryboardSegueTemplate _performWithDestinationViewController:sender:] + 447
19  UIKit                               0x0000000106df8fed -[UIStoryboardSegueTemplate _perform:] + 82
20  UIKit                               0x00000001067c8a1f -[UIViewController performSegueWithIdentifier:sender:] + 99
21  Core Geometry                       0x00000001056c6de1 _TFC13Core_Geometry6MainVC13buttonPressedfT6senderPs9AnyObject__T_ + 465
22  Core Geometry                       0x00000001056c6f86 _TToFC13Core_Geometry6MainVC13buttonPressedfT6senderPs9AnyObject__T_ + 54
23  UIKit                               0x00000001066258bc -[UIApplication sendAction:to:from:forEvent:] + 83
24  UIKit                               0x00000001067abc38 -[UIControl sendAction:to:forEvent:] + 67
25  UIKit                               0x00000001067abf51 -[UIControl _sendActionsForEvents:withEvent:] + 444
26  UIKit                               0x00000001067aae4d -[UIControl touchesEnded:withEvent:] + 668
27  UIKit                               0x0000000106693545 -[UIWindow _sendTouchesForEvent:] + 2747
28  UIKit                               0x0000000106694c33 -[UIWindow sendEvent:] + 4011
29  UIKit                               0x00000001066419ab -[UIApplication sendEvent:] + 371
30  UIKit                               0x0000000106e2e72d __dispatchPreprocessedEventFromEventQueue + 3248
31  UIKit                               0x0000000106e27463 __handleEventQueue + 4879
32  CoreFoundation                      0x0000000108a0c761 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 17
33  CoreFoundation                      0x00000001089f198c __CFRunLoopDoSources0 + 556
34  CoreFoundation                      0x00000001089f0e76 __CFRunLoopRun + 918
35  CoreFoundation                      0x00000001089f0884 CFRunLoopRunSpecific + 420
36  GraphicsServices                    0x000000010a965a6f GSEventRunModal + 161
37  UIKit                               0x0000000106623c68 UIApplicationMain + 159
38  Core Geometry                       0x00000001056c654f main + 111
39  libdyld.dylib                       0x0000000105b8768d start + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException
(lldb) 

Solution

  • Apparently something is wrong in your nib file. Try to remove all connections first between the tableView and other views. That means all outlets (IBOutlet) and actions (IBAction). Most likely the crash will be gone. Afterwards you can try to reconnect outlets and actions again, but make sure to do it correctly. Cause the error states that you are making a connection to a class with tableView, but it does not have a key (property) called tableView. So you might try to make a connection with the wrong class / object.