web-dev-qa-db-ja.com

Super.initは、初期化子から戻る前に呼び出されません

UITableViewCellクラスにカスタムイニシライザーを与えようとしましたが、何が間違っているのかわかりません。

ここに私のコードがあります:

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")
}

Super.init(frame:CGRect(...))を呼び出そうとしましたが、これを実装すると、別のエラーが発生します:スーパークラス「UITableViewCell」

私に何ができる?本当にありがとうございます!

14
Tom Kuschka

初期化子が機能する方法は、独自のプロパティ、定数、および関数をそのインスタンスに追加し、その型のオブジェクトのスーパークラスをコールバックすることです。詳細 こちら

このため、イニシャライザーを終了する前に、スーパークラスのイニシャライザーを呼び出す必要があります。ここでは、初期化子の最後の行でsuper.init()を呼び出すことをお勧めします。 initのどのUITableViewCellメソッドが最も適切かを選択できます。

14
vrwim
    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")
    }

これがあなたの助けになることを願っています SwiftのUIViewのinitメソッドをオーバーライドします

1
Mir Ashraf

初期化子を指定したスーパークラスを呼び出す必要があります。

たとえば、UIViewのサブクラスを作成しようとしましたが、まったく同じ問題がありました。 UIViewの指定イニシャライザーはsuper.init(frame: CGRect)ですUITableViewCellの指定イニシャライザーは次のとおりです。

// Designated initializer.  If the cell can be reused, you must pass in a reuse 
identifier.  You should use the same reuse identifier for all cells of the same 
form.  
- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier: 
(nullable NSString *)reuseIdentifier NS_AVAILABLE_IOS(3_0) 
NS_DESIGNATED_INITIALIZER;
- (nullable instancetype)initWithCoder:(NSCoder *)aDecoder 
NS_DESIGNATED_INITIALIZER;

これが役に立てば幸いです。

0
Mahan Mirshafa