【问题标题】:How to fix ViewController does not conform to ViewControllerDelegate如何修复 ViewController 不符合 View Controller Delegate
【发布时间】:2014-11-19 05:04:12
【问题描述】:

我有一个 CoreData 项目,其中设置了 FilterViewController,我想在 DisplayResultsViewController 中显示结果。

我知道这与委托有关,但我不知道如何解决它。我知道我不是第一个将数据从一个 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
    }
}

【问题讨论】:

    标签: ios core-data swift xcode6 uistoryboardsegue


    【解决方案1】:

    您没有显示声明包含失败方法的类的代码(从而确定self 是什么),因此我们缺少关键代码行。但一般来说,您的视图控制器应声明为:

    class MyViewController: UIViewController, ViewControllerDelegate {
        ....
    }
    

    ... 其中冒号后的第一个类 (UIViewController) 表示超类,随后的项目标识您的类声明符合的协议。该错误表明您的类不符合 ViewControllerDelegate 协议,因此它必须缺少该声明。

    【讨论】:

    • 关于 'protocol FilterViewControllerDelegate: class' 行,我在其他地方读过,在委托之后添加 'class' 并将协议行放在顶部是一种很好的做法。在destinationVC 中需要做什么才能从filterVC 中获取所有信息?
    • 好的,我知道这是Class-only Protocol。你每天学习新的东西!要在 VC 之间传递信息,您通常会让源在目标上设置一个成员变量。如果要传输的数据很多,您可以简单地让源向 dest 标识自己,然后让 dest 从源“拉”数据。
    猜你喜欢
    • 1970-01-01
    • 2015-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-27
    • 1970-01-01
    • 2010-12-08
    • 1970-01-01
    相关资源
    最近更新 更多