0

デフォルトのタブ コントローラー プロジェクトを使用してプロジェクトを作成しました。インターフェイス ビルダーを使用して .xib ファイルを編集し、画像とボタンを追加しています。それらをインターフェイス ビルダーの FirstViewController オブジェクトに接続します (これを作成し、そのクラスをコード ファイルと同じに設定します)。IBoutletsと を使用してすべてを接続しましたIBActions

すべてが正常に機能していましたが、インターフェイス ビルダーでいくつかの変更を行い ( を追加UILabel)、クリックすると実行されるメソッド (デバッガーで実行) に、ビュー コントローラーにサブビューを追加する行が追加されました。実行されなかったかのように動作します。メソッド (およびコードが実行されます) はエラーなしで実行されますが (デバッガーごと)、ビューは単に追加されていません。これは、インターフェイスビルダーを介して変更を加えた後に発生しました。

ここで、適切なタブをクリックして にドラッグし、ボタンを「Selected First View Controller」に接続IBOutletするとUILabel、そのラベルには複数の参照アウトレットができます。ここで、ボタンに対して同じことを行うと、メソッド (the IBAction) が 2 回実行されますが、実際にはサブビューが追加されて表示されます。しかし、私のIBAction(ボタン)メソッドが何かを格納するプロパティにアクセスするため、メモリアクセスエラーが発生します。これは、First View Controllerで何らかの方法でメモリを作成することに関係していると思いますが、Selected First View Controllerでそれにアクセスしようとしていますか? それが意味があるとしたら?

なぜこれが起こっているのか、なぜボタンだけが突然機能しなくなったのか、私にはわかりません。私はこの問題をできる限り説明しようとしましたが、ややこしいです。しかし、誰かがヒントやアイデアを持っている場合は、この問題とその解決方法についてどう思うか聞いてみたい.

4

2 に答える 2

1

タブバーによってロードされたビューのアクションをタブバーのコントローラーにアタッチしているようにも聞こえます-間違っている場合はお気軽に修正してください。2 つのエンティティはまったく異なっており、ビューからアクセスするデータは、タブ バーのコントローラーではなく、ビューのコントローラーから参照する必要があります (他のビュー コントローラーのロードとアンロードでかなり軽量なジョブを実行する必要があります)。同様に、サブビューをビュー コントローラーに追加するべきではありません。サブビューをどうするかについてはわかりません。ビュー コントローラーを使用してビューにサブビューを追加する必要があります。セマンティクスの問題のように見えますが、View Controller はビューとは根本的に異なります。前者には、ビューの内容と動作を管理し、ビューに応答するという仕事があります。

于 2008-11-08T16:28:52.770 に答える
1

最初のコンセントが実際に接続されていると確信していますか. nib のロード中に (initWithCoder: を介して) 設定された他のプロパティと競合するようにアウトレットに名前を付けると、適切に接続されなくなる可能性があります。awakeFromNib のアウトレットの値を NSLog することで確認できます。

于 2008-11-08T13:15:45.017 に答える