2015-06-16 17 views
9

Tôi cố gắng cung cấp cho lớp UITableViewCell của tôi một initilizer tùy chỉnh nhưng tôi không thể tìm ra những gì tôi đang làm sai.Super.init không được gọi trước khi trở về từ initializer

Đây là Mã của tôi:

init(dataObject: [NSManagedObject]!, objectAttributeValues: [String]!,placeholder: String!, segmentedControl: UISegmentedControl?, cellHeight: CGRect, cellWidth: CGRect) { 
    self.dataObject = dataObject 
    self.Placeholder.text = placeholder 
    self.objectAttributeValues = objectAttributeValues 

    if segmentedControl != nil { 
     self.segmentedControl = segmentedControl! 
     didHaveSegmentedControl = true 
    } 

} 

required init(coder aDecoder: NSCoder) { 
    fatalError("init(coder:) has not been implemented") 
} 

Tôi cố gắng để gọi super.init (khung: CGRect (...)) nhưng bằng cách thực hiện này, tôi nhận được lỗi khác: Phải gọi một initializer được chỉ định của siêu lớp 'UITableViewCell'

Tôi có thể làm gì? Cảm ơn bạn rất nhiều!

Trả lời

9

Cách trình khởi tạo hoạt động, là chúng sẽ thêm các thuộc tính, hằng số và hàm của riêng nó vào cá thể đó, sau đó gọi lại cho lớp cha của một đối tượng thuộc loại đó. Thông tin thêm here.

Vì lý do này, bạn phải gọi trình khởi tạo của lớp cha trước khi thoát trình khởi tạo. Ở đây tôi đề nghị bạn gọi super.init() trên dòng cuối cùng của trình khởi tạo của bạn. Bạn có thể chọn phương thức init nào trên UITableViewCell là thích hợp nhất.

+10

Nếu tôi gọi là 'super.init()' lỗi "_Must gọi một initialiser được chỉ định của lớp cha 'UITableViewCell' _" sẽ được xuất hiện ... –

+1

Bạn phải gọi một trong các bộ khởi tạo khác, tùy thuộc vào việc bạn muốn làm. Kiểm tra tự động điền để biết thêm. – vrwim

0
override init(frame: CGRect) { 
     super.init(frame: frame) 
    } 
    convenience init(frame: CGRect, dataObject: [NSManagedObject]!, objectAttributeValues: [String]!,placeholder: String!, segmentedControl: UISegmentedControl?, cellHeight: CGRect, cellWidth: CGRect){ 
     self.init(frame: frame) 
     self.dataObject = dataObject 
     self.Placeholder.text = placeholder 
     self.objectAttributeValues = objectAttributeValues 

     if segmentedControl != nil { 
      self.segmentedControl = segmentedControl! 
      didHaveSegmentedControl = true 
     } 

    } 

    required init?(coder aDecoder: NSCoder) { 
     fatalError("init(coder:) has not been implemented") 
    } 

Tôi hy vọng điều này sẽ giúp bạn Override init method of UIView in swift

Các vấn đề liên quan