如何修复错误:此类与密钥tableView不符合键值编码。'

时间:2016-03-28 16:24:30

标签: swift uitableview uisegmentedcontrol

我使用Table ViewSegmented Control创建了一个应用,这是我的第一次。我使用了一些代码和一些教程,但它没有用。当我运行我的应用程序时崩溃并且它在日志中显示此错误:

  

MyApplication [4928:336085] *由于未捕获的异常终止应用程序' NSUnknownKeyException',原因:' [setValue:forUndefinedKey:]:此类不是密钥值编码兼容的密钥的tableView&#39。   *第一次抛出调用堆栈:   (    0 CoreFoundation 0x000000010516fd85 __exceptionPreprocess + 165    1 libobjc.A.dylib 0x0000000105504deb objc_exception_throw + 48    2 CoreFoundation 0x000000010516f9c9 - [NSException raise] + 9    3基础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视图] + 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:sender:] + 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 GraphicsServices 0x000000010726dad2 GSEventRunModal + 161    34 UIKit 0x0000000103aa4f09 UIApplicationMain + 171    35 Dhikr 0x0000000101f26282 main + 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()  
}

这是 main.Storyboard

enter image description here

我多次检查了代码,但它无法正常工作。首先,我必须只使用Table View,观看本教程(https://www.youtube.com/watch?v=ABVLSF3Vqdg)我认为在教程中使用Segmented Control会很有用。但仍然无法奏效。相同的代码,相同的错误。 有人能帮助我吗?

2 个答案:

答案 0 :(得分:88)

您的故事板设置为预期名为tableView的商店,但实际商店名称为myTableView

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

答案 1 :(得分:7)

您有可能从" tableView"更改了表格视图的名称。 to" myTableView"在某些时候?