当前位置: 首页 > 知识库问答 >
问题:

无法识别的选择器/连接视图控制器

邵和硕
2023-03-14

我正在尝试将nib文件加载到UITableView,我使用情节提要将其放置在UIView中。

UITableView和UIView有两个独立的ViewController,我正在尝试连接它们,但我收到一条错误消息,说无法识别选择器。这是什么意思?

谢谢你!

VC1

class CreateMeetPlanning: CreateMeet {

@IBOutlet var tableView: TableViewPlanning!

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

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

//Automatically open keyboard
//override func viewDidAppear(_ animated: Bool) {
    //super.viewDidAppear(animated)
    //planningRow.becomeFirstResponder()
//}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}


/*
// MARK: - Navigation

// In a storyboard-based application, you will often want to do a little preparation before navigation
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    // Get the new view controller using segue.destinationViewController.
    // Pass the selected object to the new view controller.
}
*/

}

VC2

class TableViewPlanning: UITableViewController, UITextFieldDelegate {

// forcing status bar to hide
override var prefersStatusBarHidden: Bool {
    return true
}

// properties
var todo: Array<String> = [""]
var defTodo: Array<String> = [""]


// selecting textfield in first empty row

func responder() {
    self.tableView.scrollToRow(at: IndexPath(row: 0, section: 0), at: .none, animated: false)
    if let cell = tableView.cellForRow(at: IndexPath(row: 0, section: 0)) as? TableViewCell {
        cell.textField.becomeFirstResponder()
    }
}


// saving data to UserDefaults
func save() {
    let defaults = UserDefaults.standard
    defaults.set(self.todo, forKey: "todo")
}

// retrieving data from UserDefaults
func get() {
    let defaults = UserDefaults.standard
    self.todo = defaults.stringArray(forKey: "todo") ?? [""]
    tableView.reloadData()
}


// action on tapping "Done" on a keyboard

func textFieldShouldReturn(_ textField: UITextField) -> Bool {
    let task = textField.text ?? " "
    let indexPath = self.tableView.indexPathForView(textField)
    if indexPath?.row == 0 {
        self.todo.insert(task, at: 1)
        print(self.todo)
        tableView.beginUpdates()
        self.tableView.insertRows(at: [indexPath!], with: .top)
        tableView.endUpdates()
    }
    else {
        self.todo[indexPath!.row] = task
        tableView.reloadData()

    }
    responder()
    save()
    return true
}

// TABLEVIEW methods
// amount of rows
public override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return self.todo.count
}

// content for the row
public override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "cell") as! TableViewCell
    cell.textField.delegate = self
    cell.textField.text = self.todo[indexPath.row].description
    // cell.textField.becomeFirstResponder()
    return cell
}

// deleting rows: all rows to be deleted if first row is deleted, others as usual.
override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath)
{
    if indexPath.row != 0 {
        if editingStyle == .delete
        {
            self.todo.remove(at: indexPath.row)
            tableView.beginUpdates()
            tableView.deleteRows(at: [indexPath], with: .automatic)
            tableView.endUpdates()
        }
    }
    else { if editingStyle == .delete
    {
        self.todo = self.defTodo
        tableView.reloadData()
        }
    }
    print(self.todo)
    responder()

    save()
}

@objc func refresh(refresh: UIRefreshControl) {
    refresh.endRefreshing()
    responder()
}

// ViewController life-cycle
override func viewDidLoad() {
    super.viewDidLoad()
    let nib = UINib(nibName: "TableViewCell", bundle: nil)
    tableView.register(nib, forCellReuseIdentifier: "Cell")
    get()
    refreshControl = UIRefreshControl()
    refreshControl?.attributedTitle = NSAttributedString(string: "")
    refreshControl?.addTarget(self, action: #selector(refresh(refresh:)), for: .valueChanged)
    refreshControl?.tintColor = UIColor.red
    tableView.refreshControl = refreshControl
    responder()
}

override func viewDidAppear(_ animated: Bool) {
}
}

错误

2017-11-21 17:48:15.599430+0100 meetIOS[416:43942] [MC] Lazy loading NSBundle MobileCoreServices.framework
2017-11-21 17:48:15.601629+0100 meetIOS[416:43942] [MC] Loaded MobileCoreServices.framework
2017-11-21 17:48:15.631201+0100 meetIOS[416:43942] [MC] System group container for systemgroup.com.apple.configurationprofiles path is /private/var/containers/Shared/SystemGroup/systemgroup.com.apple.configurationprofiles
2017-11-21 17:48:15.797665+0100 meetIOS[416:43942] refreshPreferences: HangTracerEnabled: 0
2017-11-21 17:48:15.797774+0100 meetIOS[416:43942] refreshPreferences: HangTracerDuration: 500
2017-11-21 17:48:15.797820+0100 meetIOS[416:43942] refreshPreferences: ActivationLoggingEnabled: 0 ActivationLoggingTaskedOffByDA:0
2017-11-21 17:48:17.744420+0100 meetIOS[416:43942] -[meetIOS.TableViewPlanning superview]: unrecognized selector sent to instance 0x101d1a9f0
2017-11-21 17:48:17.746086+0100 meetIOS[416:43942] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[meetIOS.TableViewPlanning superview]: unrecognized selector sent to instance 0x101d1a9f0'
*** First throw call stack:
(0x182bd5d04 0x181e24528 0x182be31c8 0x18c3cb110 0x182bdb6b0 0x182ac101c 0x18c014074 0x18c2dc5ec 0x18c747160 0x18c7472d8 0x18c746e98 0x18c2dc57c 0x18c747160 0x18c746e98 0x18c59c0cc 0x18c747160 0x18c7472d8 0x18c746e98 0x18c59b40c 0x18c37b17c 0x18c12aee4 0x18c00cba4 0x18c00cad4 0x18c38ac04 0x18c383a2c 0x18c385428 0x18c387ccc 0x18c388200 0x18c387c1c 0x18c0ebaa8 0x18c910038 0x18c92ab30 0x18c92a9d4 0x18c92aca8 0x18c041608 0x18c041588 0x18c02c2f0 0x18c040e7c 0x18c04099c 0x18c03be6c 0x18c00d378 0x18c95a85c 0x18c95cde8 0x18c955d04 0x182b7e2e8 0x182b7e268 0x182b7daf0 0x182b7b6c8 0x182a9bfb8 0x184933f84 0x18c0702e8 0x100948e14 0x1825be56c)
libc++abi.dylib: terminating with uncaught exception of type NSException
(lldb) 

共有1个答案

朱高超
2023-03-14

最有可能的问题是,在故事板中,您有创建会议计划(CreateMeetPlanning)的VC,您有一个已分配给outlet的tableView 。但是,TableViewPlanning不是UITableView,而是UITableViewController。因此发生了车祸。

您需要在Storybard中使用容器视图来嵌入UITabelviewControl,然后将其类更改为TableView规划,然后再将其连接到出口。在这个答案中也做了类似的事情。

 类似资料:
  • 我正试图将json从ajax发送到springboot控制器,但收到错误[org.springframework.web.bind.MissingServletRequestParameterException:Required Item[]参数“myJsonString[]”不存在] 下面是我的ajax代码 下面是我的控制器 我尝试了请求参数要求false,它让块工作,但如何将ajax数据获取到

  • 以下的一段代码相当于定义一个ParameterizableViewController视图控制器的快捷方式,该控制器会立即将一个请求转发(forwards)给一个视图。请确保仅在以下情景下才使用这个类:当控制器除了将视图渲染到响应中外不需要执行任何逻辑时。 以下是一个例子,展示了如何在MVC Java编程配置方式下将所有"/"请求直接转发给名字为"home"的视图: @Configuration

  • 问题内容: 我得到我的iOS应用程序错误。我尝试根据其他类似主题中提到的答案解决问题,但失败了。请查看下面的代码,并为此提供帮助。 谢谢 问题答案: 这样写选择器。 Swift 2.3或更低版本。 迅捷3 注意: 一种建议是面糊方法名称始终以小写而不是大写开头。因此,如果您使用而不是,那就更糟了。

  • 问题内容: 我为其中一个页面设置了一个版式,然后使用大量的小视图作为种子,这些小视图用于填充日期。我的状态目前看起来像这样: 如您所见,父布局将我的Controller保留在称为 EventCtrl 的页面上。现在,我希望所有视图现在都可以访问此控制器,但事实并非如此。相反,我必须将来自 eventLayout 的主要父模板包装到div中,然后在其中使用旧学校: 我至少想了解为什么会发生这种情况,

  • 问题内容: 我正在尝试从字典中获取特定键的值,但我得到了一个[[__NSCFArray objectForKey:]:无法识别的选择器发送到实例” 我NSLog我的头像字典,我的结果是: 问题答案: 问题是您没有。的计数为1,并包含。 要遍历数组中的所有项目,请枚举数组。 注意:我也从[]语法切换到了。我比较喜欢

  • 我有一个完整的工作颤振平台插件和一个演示颤振应用程序。Flatter应用程序正在通过各种渠道与本机代码愉快地交谈,并获得响应。现在我需要该应用程序在后台工作。按照各种指南,我发现我需要在我的插件上调用。但如果我这么做,应用程序就会崩溃: ***由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“[MyPlugin setPluginRegistrantC