1

私は最初のXCode/iOSプロジェクトに取り組んできましたが、これまでは楽しい経験でした。現在、私は他のビューのプライマリディスプレイとして動作するNibファイルに取り組んでいます。このNibファイル内には、主UIViewがあり、その横には7つの他のビューのシリーズを設計しています。実行時に、必要に応じて、これらの7つのビューを、メインのUIViewにあるコンテナUIVie内でスワップします。大規模なUIViewControllerクラスのコードを管理するための良いガイドラインを探しています

私はIBで設計している私の8つのトータルビュー全体にわたって、私はIBOutletsにリンクする必要のある大量のボタン、画像、およびその他のオブジェクトを持っています。このプロジェクトの規模が拡大しているので、クラスを複数のコードファイルに分割すると便利です。

カテゴリを使用するのは解決策ですが、迷惑をかけることがありました。私のカテゴリヘッダーの1つにIBOutletを作成しようとすると、XCodeコンパイラはivarsとアウトレットに関するエラーと警告を表示し続けます。私のNibには、アウトレットが必要なオブジェクトがたくさんあります。可能であれば、そのすべてを1つの大きなコードファイルに定義する必要はありません。

しかし、自分の制限内で作業しなければならないことを理解しています。私の質問は、カテゴリにIBOutletを追加する方法とは少し異なります。代わりに、私は大規模なUIViewControllerクラスを複数のコードファイルに分割するためのベストプラクティスを知りたいのですが? objective-cの限界は何ですか?そして、インターフェイスデザインを扱う際にあなたのコードを構造化する最良の方法は何ですか?

私のコードは扱いにくいものではありませんが、100個のメソッドと1,000行のコードで構成されていると、管理しやすくなります。

すべてのポインタが役立ちます。ありがとうございました!

答えて

2

複数のコントローラオブジェクトを含む1つのNIBを作成して、それぞれが関連するビューを管理し、コードを管理しやすくすることができます。欠点は、メモリのフットプリントが大きく、大きなNIBを読み込むことです。

これを達成するには、関連IBOutletsを持つ別々のクラスにコントローラを定義し、オブジェクトトレイ(UILabel、UIButtonなど)からNSObjectをIBにドラッグします。次に各オブジェクトについて、そのクラスを正しいコントローラに定義すると、すべての正しいアウトレットとアクションにアクセスできます。コントローラを1つのUIViewControllerにフックして、相互にやり取りする方法を制御できます。

しかしながら、好ましい方法では、別々のコントローラのための別々のNIbsであり、UIViewControllerサブクラスとしてそれらをすべて持つことです。あなたがiOS5に移動すると、彼らはIBのNIBをStoryboardsに取って代わられました。これにより、単一のIBファイルに別々のUIViewControllerを持たせることができますが、オブジェクトツリー全体をメモリに保持しないため、メモリ使用効率が向上します。

+0

私はストーリーボードに一見を与えます。ありがとうございました! – RLH

+0

この記事(http://toxicsoftware.com/uistoryboard-issues/)を読んだ後、私はストーリーボードの使用を避けたいとの結論に達しました。これをストーリーボードの前の質問と考えてください。 – RLH

+0

次に、単一のNIB内の複数のコントローラオブジェクト、または独立したNIBとVCが、移動方法です。 – ikuramedia

1

これはかなり読み込まれた質問です。しかし、私の経験では、このような複雑な状況では、IBが私にとって頭痛になることが分かりました。このシナリオではIBについて忘れて、コードでビューを作成することをお勧めします。 IBは本当にレイアウト、スタイルなどのより世俗的な仕事のいくつかを緩和することになっています。

私はあなたの意見を自分のプロジェクトファイルに入れることをお勧めします。あなたが必要とするものを見つけるために1000行のコードをスクロールするよりも、さらに悪いことに、その恐ろしいコード崩壊ウィジェットを溝の中で使用するよりも、

+0

私は同意します。これは読み込まれた質問のビットです。それでも、チームで作業しなければならない開発者がいて、一緒に大規模なプロジェクトに取り組む必要があります。私は、ある人、あるいは個人のグループが、自分たちの正気のために、この種のガイドラインを考え出したと思います。はい、私はあなたのルートを考えましたが、これらのスクリーンのすべてをコードで概説するには多くの時間がかかります。私のオブジェクトはそれぞれのビュー内で決して動かないので、IBは最適なアウトラインツールのように思えます。それでも、私はそれぞれのコントローラー/ニブを別々に作成することを検討していました。私はその事件を避けることを望んでいた。 – RLH

関連する問題