5

約 1 か月前、妻と私は iPhone アプリの良いアイデアを思いついたので、ユーザーの観点からアプリがどのように機能するかを考え始め、約 1 週間前に初めて XCode を開いて、発展させる。

アプリの作成に取り掛かる前に、特にアーキテクチャに関連するいくつかの重要な概念を頭の中で明確にしておきたいと思います。

参考までに、原則として、何が起こっているのかを完全に理解できるように、できるだけ多くのアプリをプログラム (特に UI) で作成したいと考えています。後で、UI 開発を高速化するためのツールとして IB を使用する可能性があります (静的ビューではなく TableView を使用しているため、現時点では適用されます)。

ビューコントローラー

  • したがって、UINavigationControllers は一般にサブクラス化されず、AppDelegate のプロパティとして作成され、MainWindow.xib のメインの「サブビュー」です。

  • UINavigationController はビューのスタックを制御し、通常はルート ビュー コントローラーで開始されます。

  • ナビゲーション コントローラーは通常、現在の/トップ ビュー コントローラー内から [self navigationcontroller] として参照され、メッセージが送信されます。これは、UIViewController 親クラスの読み取り専用プロパティです。

コアデータ

  • マネージド オブジェクト コンテキストは、モデル内のデータにアクセスするための主要な制御ポイントですが、通常は直接使用されず、代わりにフェッチ リクエストを使用してデータ オブジェクトの配列、セット、または辞書を返します。これらはビュー コントローラーによって表示および操作に使用されます。データ。

  • コンテキストはアプリ デリゲートのプロパティとして作成され、起動時にルート ビュー コントローラーに渡されます。ルート ビュー コントローラー自体がスタック内の後続のビューに渡してから、ナビゲーション コントローラーにビューを変更するように指示します (たとえば、セルがタップされたとき)。 )。

ここにたどり着くまでに1週間かかりました。モデルを作成し、データを入力してテーブルビューに表示できますが、データを編集したいときにモーダルビューで多くを見つけることができませんでした。モーダル ビューを設計しますか (通常のビューとの特定の違いがある場合)?

また、ビューオブジェクトへのデータの「バインディング」全体について、それが何をするのか、プログラムでどのように行うのか完全にはわかりませんか?

事前にコメント、提案をいただきありがとうございます。

4

2 に答える 2

2

presentModalViewController:animated を使用して表示すると、ビューはモーダルになります。モーダル ビューを表示する前に、編集するモデルを渡すことができます。

DetailViewController dvc = ...;
dvc.model = model;
dvc.delegate = self; // if you want to use a delegate pattern.
[self presentModalViewController:dvc animated:YES];

編集するモデルはモーダル ビュー コントローラーで使用できるため、viewDidLoad で値を設定できます。iOS プラットフォームで使用できるデータバインディングはありません。つまり、ビューとモデルを手動で更新する必要があります。

- (void)viewDidLoad {
    [super viewDidLoad];
    self.someTextField.text = self.model.someText;
}

モーダル ビューを操作するときに考慮する必要があるのは、モーダル ビューを閉じる方法を提供する必要があるということです。たとえば、上部に [キャンセル] ボタンと [保存] ボタンのあるナビゲーション バーを配置します。モーダル ビュー コントローラーを閉じるには、次を使用します。

[self dismissModalViewControllerAnimated:YES];

モーダル ビュー コントローラー内からモーダル ビューを閉じることは可能ですが、これは、そのようなモーダル コントローラーが問題のモデルを保存できる必要があることも意味します。個人的には、表示中のコントローラーへのコールバックを使用して、保存するかキャンセルするかを知らせ、モーダル ビューの破棄を処理します。これはデリゲート パターンを使用して実行できます。したがって、ユーザーが [保存] をタップすると、モデルを更新してデリゲートに通知できます。

- (IBAction)save:(id)sender {
    self.model.someText = self.someTextField.text;
    [self.delegate detailViewControllerDidSave:self];
}

そしてプレゼンターには次のようなメソッドがあります:

-(void)detailViewControllerDidSave:(DetailViewController *)controller {
  // save the model
  [self dismissModalViewControllerAnimated:YES];
}
于 2010-11-03T21:22:48.997 に答える
0

ビュー/データに関する私の知識からのいくつかの答え。私はまだ CoreData の経験がないので、その部分には答えません。

  • モーダル ビューは通常のビューです。ただし、ナビゲーション コントローラーにプッシュされたビューではカバーされないいくつかの UI 要素がカバーされるため、そのサイズは少し異なる場合があります。

  • ビューへのデータの「バインディング」については、テーブルビューを埋める場合はすでにそれを行っています。モデルからビューにデータを提供するコントローラーに実装する一連の「データ ソース」メソッドがあります (MVC パターン)。

于 2010-11-03T15:39:09.267 に答える