我有一个CoreData项目,我已经设置了 FilterViewController ,我希望在 DisplayResultsViewController 中显示结果。
我知道这与委托有关,但我很难解决它。我知道我不是第一个将数据从一个VC转移到另一个VC的人,但我无法找到答案。
// Top of FilterViewController
import UIKit
import CoreData
protocol FilterViewControllerDelegate: class {
func filterViewController(filter: FilterViewController,
didSelectPredicate predicate:NSPredicate?,
sortDescriptor:NSSortDescriptor?)
}
// Predicates set here
// IBAction to trigger the segue
@IBAction func filter(sender: UIBarButtonItem) {
delegate!.filterViewController(self,
didSelectPredicate: selectedPredicate,
sortDescriptor: selectedSortDescriptor)
dismissViewControllerAnimated(true, completion:nil)
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "toDisplaySearchResults" {
let navController = segue.destinationViewController as UINavigationController
let filterVC = navController.topViewController as StretchSelectorViewController
filterVC.coreDataStack = coreDataStack
filterVC.delegate = self // **ERROR here
}
}
答案 0 :(得分:0)
您没有显示声明包含失败方法的类的代码(从而确定self
是什么),因此我们错过了代码的关键行。但一般来说,您的视图控制器应声明为:
class MyViewController: UIViewController, ViewControllerDelegate {
....
}
...冒号后面的第一个类(UIViewController
)表示超类,后面的后续项标识了您的类声明符合性的协议。该错误表明您的类不符合ViewControllerDelegate协议,因此它必须缺少该声明。