2017-01-07 6 views
0

Я пытаюсь передать аргумент подклассу UIView. Мой код, кажется, работает, но после инициализации все аргумент становится нулевой: когда LineWidth (один из аргументов) вызывается в функции дро Я эту ошибку:Передача аргументов в подкласс UIView в Swift 3

"fatal error: unexpectedly found nil while unwrapping an Optional value"

Это мой код для ViewController :

import UIKit 

class ViewController: UIViewController,UIGestureRecognizerDelegate,UIScrollViewDelegate { 
    @IBOutlet weak var scrollView: UIScrollView! 
    @IBOutlet weak var matrixView = UIMatrixView(mat: [[Bool]](),gRows:20,gCols:20,lWidth:2) 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     // scrollView.delegate = self 
    } 

    func viewForZooming(in scrollView: UIScrollView) -> UIView? { 
     return self.matrixView 
    } 
} 

И это для подкласса UIView:

import UIKit 

class UIMatrixView: UIView { 
    var matrix : [[Bool]]! 
    var gridRows : Int! 
    var gridCols : Int! 
    var lineWidth : Int! 

    init(mat: [[Bool]], gRows : Int, gCols : Int, lWidth : Int){ 
     print("here") 
     self.matrix=mat 
     self.gridRows=gRows 
     self.gridCols=gCols 
     self.lineWidth=lWidth 
     super.init(frame: CGRect()) 
     print(lineWidth) 
    } 

    required init(coder aDecoder: NSCoder) { 
     super.init(coder: aDecoder)! 
    } 

    // Only override draw() if you perform custom drawing. 
    // An empty implementation adversely affects performance during animation. 
    override func draw(_ rect: CGRect) { 
     print(lineWidth) 
    } 
} 
+2

Либо создать 'matrixView' через выпускное отверстие или Programatically. Вы не можете обойти оба. – rmaddy

ответ

2

обычай UIView отмечен как слабый собственности.

Сильная ссылка на него не сохраняется после создания в коде.

Свойство, обозначенное IBOutlet, может быть установлено в Раскадке.

Или иначе, установить слабые ссылки после того, как подвид (addSubview):

func appendMatrixView() { 
    let mView = MatrixView(... 
//Important lines..... 
    addSubview(mView) 
    self.matrixView = mView; 
}