如何修复错误:此类与键 tableView 的键值编码不兼容。 [复制]

Posted

技术标签:

【中文标题】如何修复错误:此类与键 tableView 的键值编码不兼容。 [复制]【英文标题】:How to fix Error: this class is not key value coding-compliant for the key tableView.' [duplicate] 【发布时间】:2016-07-15 22:51:08 【问题描述】:

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

MyApplication[4928:336085] * 由于未捕获的异常“NSUnknownKeyException”而终止应用程序,原因:“[setValue:forUndefinedKey:]:此类与键 tableView 的键值编码不兼容。” * 首先抛出调用栈: ( 0 核心基础 0x000000010516fd85 __exceptionPreprocess + 165 1 libobjc.A.dylib 0x0000000105504deb objc_exception_throw + 48 2 核心基础 0x000000010516f9c9 -[NSException raise] + 9 3 基础 0x000000010364e19b -[NSObject(NSKeyValueCoding) setValue:forKey:] + 288 4 UIKit 0x0000000103c37d0c-[UIViewController setValue:forKey:] + 88 5 UIKit 0x0000000103e6e7fb-[UIRuntimeOutletConnection 连接] + 109 6 核心基础 0x00000001050a9890 -[NSArray makeObjectsPerformSelector:] + 224 7 UIKit 0x0000000103e6d1de-[UINib 实例化WithOwner:选项:] + 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:presentingViewController:] + 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 发送事件:] + 865 27 UIKit 0x0000000103ac5dc6 -[UIApplication 发送事件:] + 263 28 UIKit 0x0000000103a9f553 _UIApplicationHandleEventQueue + 6660 29 核心基础 0x0000000105095301 _CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION_ + 17 30 核心基础 0x000000010508b22c __CFRunLoopDoSources0 + 556 31 核心基础 0x000000010508a6e3 __CFRunLoopRun + 867 32 核心基础 0x000000010508a0f8 CFRunLoopRunSpecific + 488 33 图形服务 0x000000010726dad2 GSEventRunModal + 161 34 UIKit 0x0000000103aa4f09 UIApplicationMain + 171 35 迪克尔 0x0000000101f26282 主要 + 114 36 libdyld.dylib 0x00000001064c392d 开始 + 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()  

这里是 ma​​in.Storyboard

我检查了很多次代码,但它不起作用。首先我只能使用Table View,观看本教程(https://www.youtube.com/watch?v=ABVLSF3Vqdg)我认为使用Segmented Control 会像教程中一样。但还是不行。相同的代码,相同的错误。 有人可以帮我吗?

【问题讨论】:

检查这个。 ***.com/questions/10152872/… 我遇到了类似的问题。这样做的原因是因为我为我的应用程序制作了两个方案/目标,并且视图控制器仅添加到其中一个方案/目标中,而我正在运行另一个目标/方案。将 Viewcontroller 类添加到所有目标/方案解决了这个问题。 【参考方案1】:

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

如果您删除情节提要中的连接并重新连接到正确的变量名称,它应该可以解决问题。

【讨论】:

如何“删除连接”? 我的话,我是否必须单击情节提要中的内容才能查看所有连接并将其删除?是否有一些界面可以显示故事板中的哪些内容与代码中的哪些内容相关联?我还听说过一个我还没有找到的“.nib”文件 @pete 代码中的 IBOutlet 声明会显示它们是否已连接,但不会显示情节提要中的哪些内容与不存在的变量相关联。 右键单击故事板中的按钮。在底部附近,将显示一个出口。单击它旁边的 x 将其从按钮中删除。 如今“Nib”文件的文件扩展名为 .xib,所以用词不当【参考方案2】:

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

【讨论】:

以上是关于如何修复错误:此类与键 tableView 的键值编码不兼容。 [复制]的主要内容,如果未能解决你的问题,请参考以下文章

iOS/Facebook 登录错误:此类与键的键值编码不兼容

编辑核心数据会产生错误,此类与键的键值编码不兼容

此类与键 scrollView 的键值编码不兼容

该类与键 tableView 的键值编码不兼容

将项目从情节提要更改为 xib 文件时出现“此类与键的键值编码不兼容”错误

iOS - AppDelegate 此类与键视图的键值编码不兼容