2012-04-04 6 views
6

私はスタンフォードCS193pコースの電卓デモで、IBOutlet接続がラベルからヘッダーファイルにドラッグされていることに気付きました。ただし、IBAction接続は.mファイルに直接作成されていました。私はドキュメントを読んでみると、Googleで検索しましたが、これの背後に理由が見つかりませんでした。IOS CS193p - なぜIBAction接続が.hにではなく.mファイルにドラッグされたのですか?

私は、IBActionのdigitPressedメソッドもヘッダーファイルで宣言する必要があると主張します(インターフェイスの一部ではない)。

私は明らかにObjective C(Javaで動作します)にかなり新しいので、何か基本的なものが欠けていると確信しています。

誰でも説明していただけますか?

答えて

8

クラスのヘッダーファイルで宣言すると、パブリックインターフェイスの一部になります。これには、View Controllerで定義されたアウトレットとアクションが含まれます。

公開する必要があるかどうかは、設計上の問題です。優れたプリンシパルは:必要な場合のみです。 ViewControllersのアウトレットとアクションでは、しばしばパブリックである必要はないため、パブリックである必要はありません。

一般的には、パブリックインターフェイスに含めるべきことをいくつか推測してから、(あなたがきれいな開発者の場合は)実装が成熟したときにもう一度見て、本質的でないものを取り除いてください。

+3

.mファイルでIBOutletを宣言し、IBでそれらをリンクすることはかなり新しいです。デモやチュートリアルはすべてに追いついたわけではありません。これは間違いなく優れた解決策であり、他のオブジェクトのIBOutlet(決して実行すべきではありません)の変更などの非常に悪い習慣を回避します。 –

+0

@ダン、アウトレットや行動を公開する必要がない理由を説明できますか?これらが公開されていない場合、Viewはどのようにコントローラにアクセスしますか? – Rahul

+1

MVCで教育されている場合、ViewControllerは混乱する名前になります。それはあなたが考えているように、頭字語の2つの同輩のペアリングではありません。それをビューをコントロールするものと考える方が良いです。その意味では、自分の視点を非公開にする方が意味があります。これはルールでもコースでもなく、一般的な方法です。 ViewはView Controllerのプロパティであり、作成するサブクラスにはコントロールする追加のサブビューがあることがよくあります。そのコントロールは、他のコントロールとコントロールを共有しないという点で、通常はかなり絶対的です。私は良いリファレンスのために少し私にGoogleをさせて、私はここに投稿します。 – danh

関連する問題