如何修复错误:此类不是密钥表视图的键值编码兼容.

Emm*_*Emm 45 uitableview uisegmentedcontrol swift

我用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连接] + 109 6的CoreFoundation 0x00000001050a9890 - [NSArray的makeObjectsPerformSelector:] + 224 7的UIKit 0x0000000103e6d1de - [UINib instantiateWithOwner:选择:] + 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:presentsViewController:] + 133 14 UIKit 0x0000000103c525bb - [UIViewController _presentViewController:withAnimationController:completion:] + 4002 15 UIKit 0x0000000103c5585c - [UIViewController _performCoordinatedPresentOrDismiss:animated:] + 489 16 UIKit 0x0000000103c5536b - [UIViewController presentViewController:animated:completion:] + 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:为:从:forEvent:] + 92 22的UIKit 0x0000000103c19e67 - [UIControl sendAction:至:forEvent:] + 67 23的UIKit 0x0000000103c1a143 - [UIControl _sendActionsForEvents:withEvent:方法] + 3 27 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 GraphicsServices 0x000000010726dad2 GSEventRunModal + 161 34的UIKit 0x0000000103aa4f09 UIApplicationMain + 171 35 dhikr的0x0000000101f26282主+ 114 36 libdyld.dylib 0x00000001064c392d start + 1)libc ++ 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()  
}
Run Code Online (Sandbox Code Playgroud)

这是main.Storyboard

在此输入图像描述

我多次检查代码,但它不起作用.首先我只能使用Table View,看这个教程(https://www.youtube.com/watch?v=ABVLSF3Vqdg)我认为它可以Segmented Control在教程中使用.但仍然行不通.相同的代码,相同的错误.有人能帮我吗 ?

Phi*_*lls 98

您的故事板设置为期望出口,tableView但实际的出口名称是myTableView.

如果删除故事板中的连接并重新连接到正确的变量名称,则应解决问题.

  • 右键单击故事板中的按钮.在底部附近,将显示出口.单击旁边的x将其从按钮中删除. (7认同)
  • 如何“删除连接”? (2认同)

Pau*_*ren 8

您是否有可能在某些时候将表视图的名称从"tableView"更改为"myTableView"?