我遇到了从searchResultController到另一个viewcontroller的问题
从一开始: 我有三个控制器,一个嵌入了CollectionView和UISearchController的UIViewController,一个UITableViewController,它将充当searchResultController,以及每个tableview单元在单击时将转换到的最终UIViewController。 Here is an image of Main.Storyboard。 Here 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)。任何帮助将不胜感激。
答案 0 :(得分:1)
错误很明显,你没有标识符testSeg
的任何segue。单击segue,然后在右侧菜单中转到属性检查器并将标识符testSeg
添加到其中。
答案 1 :(得分:0)
我有同样的问题。我添加新的segue和新的展开segue,定义标识符,测试我的应用程序并为两个新的segue获得相同的错误
接收者&lt; ...&gt;没有带标识符的segue&#39; ...&#39;
我解决了。 在我的情况下,问题是我错误地在两个故事板中有两个相同类的实例,Main.Storyboard(Base)和Main.Storyboard(英语)。一个新的segues只存在于一个故事板中。 我不需要两个故事板,所以我只删除Main.Storyboard(英文),它就解决了这个问题。