Swift SearchResultsController Segue - “Receiver ...没有带标识符的segue'testSeg''”

时间:2016-10-07 18:01:59

标签: ios swift uitableview segue uisearchcontroller

我遇到了从searchResultController到另一个viewcontroller的问题

从一开始: 我有三个控制器,一个嵌入了CollectionView和UISearchController的UIViewController,一个UITableViewController,它将充当searchResultController,以及每个tableview单元在单击时将转换到的最终UIViewController。 Here is an image of Main.StoryboardHere the segue with its identifier is shown, which is the problem

segue是从SearchResultsTableViewController本身链接的,而不是tableviewcell 一旦我点击搜索结果,我就会从SearchResultsController中的didSelectRowAtIndexPath方法执行该Segue。但是,我得到了“Receiver ...没有标识符'testSeg'''错误。

为清楚起见,控制器的名称及其角色是:

1)DiscoverViewController :(包含UISearchController和CollectionView)

2)SearchResultsTableViewController(充当searchResultsController,它正确地过滤和更新任何数据。每个单元应该从该控制器中移出)

3)UIViewController(一个简单的UIViewController,它是segue的目的地)

问题在于segue,其他一切都按预期执行。这是SearchResultsTableViewController的代码。

注意:您可以忽略这是Swift 3这一事实。我尝试使用Swift 2.3并获得了同样的错误

private let reuseIdentifer = "searchCell"

class SearchResultsTableViewController: UITableViewController {

var searchResults: [String]!

override func viewDidLoad() {
    super.viewDidLoad()
    // Uncomment the following line to preserve selection between presentations
    // self.clearsSelectionOnViewWillAppear = false
    // Uncomment the following line to display an Edit button in the navigation bar for this view controller.
    self.tableView!.register(UITableViewCell.self, forCellReuseIdentifier: reuseIdentifer)
}

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

// MARK: - Table view data source

override func numberOfSections(in tableView: UITableView) -> Int {
    // #warning Incomplete implementation, return the number of sections
    return 1
}

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    // #warning Incomplete implementation, return the number of rows
    return (searchResults?.count)!
}

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: reuseIdentifer, for: indexPath) 
    // Configure the cell...
    cell.textLabel?.text = searchResults[indexPath.item]
    return cell
}

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    self.performSegue(withIdentifier: "testSeg", sender: self)
}
}

searchResults数组来自DiscoverViewController。一切都很好,除了segue。选择行后,应用程序崩溃并显示错误:

2016-10-07 12:17:51.216 MultiTestDemo[1028:10002] *** Terminating app
due to uncaught exception 'NSInvalidArgumentException', reason: 
'Receiver (<MultiTestDemo.SearchResultsTableViewController: 
0x7fea214055f0>) has no segue with identifier 'testSeg''

我确保segue标识符中没有空格或任何内容。我甚至将它直接复制到了SearchResultsTableViewController的didselectrowatindexpath函数。

总而言之,我要求的是帮助我在IB中连接时,为什么SearchResultsTableViewController无法再识别segue(或任何带有任何标识符的segue)。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

错误很明显,你没有标识符testSeg的任何segue。单击segue,然后在右侧菜单中转到属性检查器并将标识符testSeg添加到其中。

答案 1 :(得分:0)

我有同样的问题。我添加新的segue和新的展开segue,定义标识符,测试我的应用程序并为两个新的segue获得相同的错误

  

接收者&lt; ...&gt;没有带标识符的segue&#39; ...&#39;

我解决了。 在我的情况下,问题是我错误地在两个故事板中有两个相同类的实例,Main.Storyboard(Base)和Main.Storyboard(英语)。一个新的segues只存在于一个故事板中。 我不需要两个故事板,所以我只删除Main.Storyboard(英文),它就解决了这个问题。