0

私の論理が正しいかどうか教えていただけますか? 私はまだ iOS に非常に慣れていないため (約 1 週間使用しています)、間違った方向に進む前にフィードバックをいただければ幸いです。

写真エンティティを使用してコアデータをセットアップしています。そして、私がやろうとしているのは、UIScrollView 内に「メモカード」のようなオブジェクトを作成することです。ノート カードには、上部に UILabel があり、その後に UIImage が中央にあり、画像の下に 2 つの UIButton があります (つまり、ボタンは「送信」または「キャンセル」になります)。私の目標は、ページ ターナーを含む、これらのノート カードのようなオブジェクトを写真のようにスクロールできるようにすることです。

ほとんどの場合、ScrollView と Page Turner の部分は処理済みだと思います。ノートカード オブジェクトを作成する最善の方法がよくわかりません。

UIView のサブクラスを作成してから、プログラムでノートカード インスタンスを作成する必要がありますか、またはクラスからビューに IBOutlets を作成できるように UIView の XIB ファイルを作成する方法はありますか? 後者が可能であれば、私はそれをやりたいのですが、UIViewController とは対照的に、XIB ファイルが UIView オブジェクトからのアウトレットを受け入れるようにする方法がわかりません。

カスタムUIViewの外では、これらのオブジェクトをコアデータベースからクエリする方法についてまだ不明です。これにより、「保留中の決定」ウィンドウをロードすると、スクロール可能なオブジェクトで決定を下すことができます。

UIScrollViewController クラスの viewDidLoad の下で、コア データ属性を使用して init を割り当て、UIView 変数を設定するコードとともに、FetchRequests で構成される For ループを使用する必要があるかどうか教えていただけますか? それが正しいかどうか、より良い代替案があるかどうか、私にはわからないからです。

4

1 に答える 1

1

他のビューと同様に、カスタムの XIB および UIViewController の子孫クラスを作成し、スクロールビューで再利用できます。これにより、サブビューを手動でレイアウトする必要がなくなり、表示する文字列の書式設定に関するロジックをカプセル化できます。このアプローチを使用すると、カスタム ノートカード ビューは、スタンドアロンの場合、または他の何か (スクロール ビューなど) のサブビューとして機能し、ユーザーに一貫したインターフェイスを提供します。

ビュー内のアウトレットは、任意のオブジェクトに接続できます。UIViewController 派生クラスでない場合は、XIB でプロキシ オブジェクトとして参照できます。プロキシのクラスをカスタム クラスに設定し、通常どおりアウトレットを接続します。ただし、ビューを作成するときは、オプション ディクショナリのNSBundle loadNibNamed メソッドにそのカスタム クラス (XIB で定義したプロキシ) のインスタンスを渡す必要があるため、少し不安定になります。それは機能しますが、追加のコードなしでビューを独立して正しく動作させることができるため、通常は前述のソリューションを使用します。

両方のソリューションで、エンティティをパラメーターとして受け取るビュー用の指定されたイニシャライザーを使用して、ビューがそれ自体をセットアップできるようにします。また、ビューがレンダリングされた後にエンティティを変更するために使用できるプロパティ (プロパティにより、ビューが変更されたときにビューが更新され、アニメーション化されます)

現在の SDK (< 5) では、サブビューは通常のビュー ライフサイクル (viewDidLoad、viewDidUnload など) に参加しません。これらのメソッドが呼び出されるのはプライマリ ビュー コントローラー (push/popViewController、presentModalViewController を使用して表示されるもの) だけです。そのため、サブビューにこれらのライフサイクル メソッドのいずれかで実行されるコードがある場合 (おそらくそうなるでしょう)、独自のメソッドを作成する必要があります。サブビューに何が起こっているかを通知するための配管。SDK 5 はまだ NDA の下にあるため、何が違うのかはわかりませんが、アプリが 5 まで待つことができれば、あなたの人生はずっと楽になると言えますWhats new in 5 を見れば、私が何を指しているのかわかるでしょう。

データのロードに関しては、アプリケーションがどのように情報をロードするか、一度に表示されるレコードの数などを知らずに、最適な方法を推奨することは困難です。一般に、フェッチ要求はできるだけ少なくする必要があります。すぐに表示されるよりも多くのデータをロードしません。私のプロジェクトでは、通常、次のことを行います。

  • 「ビュー」ごと に単一のFetchRequestを作成します
  • フェッチ要求の batchSize を画面サイズの 2.5 倍に設定します (私にとってはうまくいった任意の値です)。
  • 私は常に自分のエンティティ用にカスタム NSManagedObjects (恥知らずなプラグ)を作成します。プロパティ名のオートコンプリートを提供するため、エンティティの操作が容易になり、実際には getValueForKeyよりもパフォーマンスが向上します (Apple によると)。
  • エンティティのそれぞれに大量のデータがある場合は、setReturnsObjectsAsFaults を試して、大量のデータのロードを遅らせることが、パフォーマンスを損なうよりもメモリに役立つかどうかを確認します
  • 各エンティティのいくつかのプロパティのみが必要な場合は、リスト ビューに必要なプロパティのみを含む「ヘッダー」エンティティと、すべてのデータを含む「完全な」エンティティが存在するように、エンティティをリファクタリングします (詳細ビューの読み込みを容易にするヘッダー)
  • 各エンティティから 1 つのプロパティのみが必要な場合 (たとえば、カレンダーにインジケーターを表示するために予定が発生する一意の日付のリストを取得する場合)、propertiesToFetch を NSDictionaryResultsType と組み合わせて使用​​して、それらの値の配列のみを返します。
于 2011-06-26T15:50:05.173 に答える