2015-07-21 4 views
0

SWIFT/IOS 8.2 Я пытаюсь установить CalculatorViewController в качестве цели для делегата, чтобы я мог получать данные, но я, кажется, неправильно устанавливаю: «EXC_BAD_ACCESS (код: 2))»ошибки, связанные с созданием делегата из UISplitViewDetail для управления в Swift

(в 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 
} 

Вопросы:

я получаю аварию с «EXC_BAD_ACCESS (код: 2)» Ошибка при попытке установить делегат в GraphViewController ... Любая идея, почему?

Я не знаю, как добраться до класса от уровня CalculatorViewController. Вот раскадровка:

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

извините за много правок, я все еще пытаюсь обойти stackoverflow.com и не совсем уверен, если я делаю это править/редактировать правильно. Благодарим вас за терпение. Я хочу, чтобы сообщение стало более удобочитаемым. Будьте уверены, что – John

ответ

0

Попробуйте сделать что-то вроде этого:

var graphViewController: GraphViewController? 

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

, если я добавлю предоставленный код в свой калькулятор CalculatorController, он компилируется, но при запуске я получаю фатальную ошибку (** graphViewController! .graphView.calculatorViewDataSource = self ** ' фатальная ошибка: неожиданно найден nil при распаковке необязательного значения ') Я полагаю, что graphViewController может быть нулевым, теперь я могу посмотреть на жизненный цикл представления, я думаю ... – John

+0

Вы должны вызвать' setupSplitViewController' в 'viewDidLoad()' в ViewController и 'awakeFromNib' или' initWithCoder' для случаев UIView. – Klevison

+0

Я взломал его, посмотрев на предлагаемое решение. Казалось, что-то вроде: 'graphView.calcDataSource = splitViewController !.viewControllers.first! .subviews.first как CalculatorViewController' будет работать, но я получаю ту же ошибку. Спасибо за продолжение. – John