【问题标题】:errors creating a delegate from UISplitViewDetail to master in Swift在 Swift 中创建从 UISplitViewDetail 到 master 的委托时出错
【发布时间】:2015-10-10 06:36:28
【问题描述】:

SWIFT/IOS 8.2 我正在尝试将我的 CalculatorViewController 设置为委托目标,以便我可以获取数据 - 但我似乎设置错误:“EXC_BAD_ACCESS (code:2)”

(在 GraphView.swift 中)

protocol CalculatorViewDataSource: class {
    func calculateYForXEquals(sender: CalculatorViewController, currentX: CGFloat) ->CGFloat?
}

class GraphView: UIView {
    weak var calculatorViewDataSource: CalculatorViewDataSource?
    //...
}

(在 GraphViewController.swift 中)

class GraphViewController: UIViewController {
    @IBOutlet weak var graphView: GraphView! {
        didSet{
            graphView.calculatorViewDataSource = self.view.superview?.superview as CalculatorViewController
        }
    }
// ...
}

(在 CalculatorViewController.swift 中)

class CalculatorViewController: UIViewController, CalculatorViewDataSource{
    // ...
}

func calculateYForXEquals(sender: CalculatorViewController, currentX: CGFloat) ->CGFloat? {
    return nil
}

问题:

当我尝试在 GraphViewController 中设置委托时出现“EXC_BAD_ACCESS (code:2)”错误...知道为什么吗?

我不知道如何从CalculatorViewController 级别进入班级。 这是故事板:

-> SplitViewController - NavigationController - (Master) CalculatorViewController
         I
     NavigationController - (Detail) GraphViewController

【问题讨论】:

  • 很抱歉进行了许多编辑,我仍在尝试绕过 stackoverflow.com 并且不确定我是否做得正确/正确编辑。感谢您的耐心等待,我真的想让帖子更具可读性,放心

标签: ios swift delegates protocols cs193p


【解决方案1】:

尝试做这样的事情:

    var graphViewController: GraphViewController?

    private func setupSplitViewController() {
        let masterNavigationController: AnyObject? = splitViewController?.viewControllers.first
        graphViewController = masterNavigationController!.topViewController as? GraphViewController
        graphViewController!.graphView.calculatorViewDataSource = self
    }

【讨论】:

  • 如果我在我的 CalculatorViewController 中添加提供的代码它可以编译,但在启动时出现致命错误 (graphViewController!.graphView.calculatorViewDataSource = self fatal error: unexpectedly found nil while unwrapping an Optional value) 我接受它graphViewController 可能为零,现在我来看看我猜想的视图生命周期......
  • 您应该在 ViewController 案例中调用 setupSplitViewController viewDidLoad(),在 UIView 案例中调用 awakeFromNibinitWithCoder
  • 我正在通过查看建议的解决方案来破解它,它似乎类似于 - graphView.calcDataSource = splitViewController!.viewControllers.first!.subviews.first as CalculatorViewController 可以工作,但我遇到了同样的错误。感谢您的跟进。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-31
  • 2023-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多