Slide
description
Transcript of Slide
2014年7月25日
TeshGym
akuraru
2 今日話すこと• ViewはModelの写像であるということをはなします– MVCの概要– 独自のデザインパターン
• 対象– CoreDataを使っている
3 MVC• 機能ごとの分離を明確にすることでそれぞれを独立性を確保できる。
• それぞれのライブラリを使って実装する• 再利用性を上げる
4 MVC
5 画面の描画
6 画面の描画
7 画面の描画- (void)updateView {
self.model = [Model MR_findFirst];
self.subView = [self createSubView];
[self.subView setModel:self.model];
[self.view addSubView:self.subView];
}
1. コントローラはモデルを読み込む
2. Viewを生成する
3. ViewにModelを反映させる
8 画面の描画- (void)updateView {
self.model = [Model MR_findFirst];
[self.subView setModel:self.model];
}
1. コントローラはモデルを読み込む
2. Viewを生成する
3. ViewにModelを反映させる
9 TableViewの描画- (UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath{
Model *model = [self modelForIndexPath:indexPath];id cell = [tableView dequeueReusableCellWithIdentifier:
[self identifierForEntity:model]];[cell setModel:model];return cell;
}
1. コントローラはモデルを読み込む
2. Viewを生成する
3. ViewにModelを反映させる
10 ここまでのまとめ• ViewはModelの写像
11 Modelの変更• Viewの変更すればModelに反映させる• ManagedObjectの扱いに注意が必要
12 Modelの変更• コンテキストがひとつの場合、Modelを変更した場合戻すのが大変。
• 戻さずに別のコンテキストを保存すると変更が保存されてしまう。
• コンテキストを複数扱えるほど頭良くない
13 Modelの変更• Wrapper Objectというパターン– 編集画面でのViewの変更を即座に反映する
Modelに反映する– 戻す手間を減らすため
※ Wrapper Objectは造語であって一般的な言葉ではない
14 Wrapper Object
• ManagedObjectと同じプロパティを持つ。• コンテキストを増やさずに、変更可能なManagedObjectとして振る舞う
• ManagedObjectを格納している• 実際に保存する段階になってManagedObject
に反映させる
15 日記の例え• 例えば日記アプリでタイトル、本文が保存できるとする。
@interface Diary : NSManagedObject@property (nonatomic, strong) NSString *title;@property (nonatomic, strong) NSString *content;@end
16 日記のラッパー@interface DiaryWrapper@property (nonatomic, strong) NSString *title;@property (nonatomic, strong) NSString *content;@property (readonly, nonatomic, strong) Diary *entity;
// Diary又はnilを受け取って、wrapperを初期化する- (instancetype)initWithDiary:(Diary *)entity;
// 渡されたDiaryに対してラッパーの状態を反映させる- (void)updateDiary:(Diary *)entity;@end
17 なぜ使うのか• 一つのコンテキストを扱う• 変更しやすいManagedObjectのように振る舞う。
• Wrapperに対して変更を加えてもManagedObjectには影響しない
• 変更を反映したくなければWrapperを捨てればいい
18 まとめ• Wrapper Objectを紹介しました• 変更しやすいManagedObject
19 コードhttps://github.com/akuraru/TechGym