質問

私の質問は少し愚かかもしれませんが、IB でインスタンス化されたオブジェクトは、たとえばボタンのクリックを処理できないのはなぜですか?つまり、独自のオブジェクトを xib に追加し、アウトレットをコントロールにリンクし、コントロールアクションをオブジェクトのメソッドにリンクすることができますが、ボタンを押すとすべてがクラッシュします(不明なセレクター)。

それについてのヒントはありますか?

編集:要求されたコード:

@interface TextController {
    IBOutlet UILabel * textLabel;
    IBOutlet UITextField * textField;
}

-(IBAction)buttonClicked:(id)sender;

@end

@implementation TextController

-(IBAction)buttonClicked:(id)sender {
    textLabel.text = @"Ololo";
}

@end

IB での接続は問題ありません。信じてください。このドラッグアンドドロップのすべてを誤解させるのは本当に難しいです:)

編集2: TextController はファイル所有者ではありません (この場合は正常に動作します)。ただし、アクションを何らかのオブジェクト (UIViewController のサブクラスではない可能性もあります) に関連付けることができない理由を理解したいだけです。

役に立ちましたか?

解決

アウトレットとアクションを nib ファイル内の任意のオブジェクトに配線できます。ドラッグして NSObject Interface Builder で、nib ファイル上にライブラリ パレットを作成します。次に、情報パレットの「アイデンティティ」タブに移動し、オブジェクトのクラスを設定します。

このようにして、ペン先から任意のクラスの任意のオブジェクトをインスタンス化できます。フックしたいターゲットが nib ファイルから静的に作成されている場合。ファイルの所有者がオブジェクトへの参照を少なくとも 1 つ持っていることを確認してください。そうしないと、オブジェクトが作成されるとすぐに割り当てが解除されます。ターゲットは送信者によって保持されません。

接続したいオブジェクトがペン先から静的に作成されるべきでない場合は、次のコードを実装します。 awakeFromNib nib ファイルからインスタンス化されたクラス内で、コード内でターゲットを接続します。

最後のオプションは、nib ファイルに独自のサブクラスがまったくない場合です。次に実装します initWithNibName:bundle: あなたの中で UIViewController サブクラスを作成し、スーパー実装を呼び出した後にコードでターゲットを接続します。

他のヒント

これは通常、接続が正しく接続されていないことを意味します。ファイルの所有者 TextController は IB ですか?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top