20130303 idw core_data

102
CoreDataによる データ駆動型 プログラミング Shinji Kobayashi GentleSoft 1333日日曜日

Upload: shinji-kobayashi

Post on 24-Jun-2015

2.898 views

Category:

Technology


2 download

DESCRIPTION

第十八回 iPhone Developer Workshop発表資料

TRANSCRIPT

Page 1: 20130303 idw core_data

CoreDataによるデータ駆動型プログラミング

Shinji KobayashiGentleSoft

13年3月3日日曜日

Page 2: 20130303 idw core_data

Name:Shinji Kobayashi

Twitter:@gentlejkov

GentleSoft

Who are you?

http://gentlesoft.net

13年3月3日日曜日

Page 3: 20130303 idw core_data

Who are you?

https://medpeer.jp13年3月3日日曜日

Page 4: 20130303 idw core_data

アジェンダ

13年3月3日日曜日

Page 5: 20130303 idw core_data

アジェンダ

• CoreDataってなに?

13年3月3日日曜日

Page 6: 20130303 idw core_data

アジェンダ

• CoreDataってなに?

•データ駆動型プログラミングってなに?

13年3月3日日曜日

Page 7: 20130303 idw core_data

アジェンダ

• CoreDataってなに?

•データ駆動型プログラミングってなに?

•どうやって実装するの?

13年3月3日日曜日

Page 8: 20130303 idw core_data

CoreDataってなに?

13年3月3日日曜日

Page 9: 20130303 idw core_data

CoreDataとは何か

• Appleが提供するデータ永続化コンポーネント

13年3月3日日曜日

Page 10: 20130303 idw core_data

CoreDataとは何でないか

• not DataBase

• not ORM

13年3月3日日曜日

Page 11: 20130303 idw core_data

not DataBase ?

13年3月3日日曜日

Page 12: 20130303 idw core_data

not ORM ?

13年3月3日日曜日

Page 13: 20130303 idw core_data

じゃあCoreDataって何なのさ

13年3月3日日曜日

Page 14: 20130303 idw core_data

じゃあCoreDataって何なのさ

• CoreDataを管理するオブジェクト群

13年3月3日日曜日

Page 15: 20130303 idw core_data

じゃあCoreDataって何なのさ

• CoreDataを管理するオブジェクト群

NSManagedObjectContextデータの操作を管理

13年3月3日日曜日

Page 16: 20130303 idw core_data

じゃあCoreDataって何なのさ

• CoreDataを管理するオブジェクト群

NSManagedObjectContextデータの操作を管理

 NSManagedObjectModelデータの構造を管理

13年3月3日日曜日

Page 17: 20130303 idw core_data

じゃあCoreDataって何なのさ

• CoreDataを管理するオブジェクト群

NSManagedObjectContextデータの操作を管理

 NSPersistentStoreCoordinatorデータファイルを管理

 NSManagedObjectModelデータの構造を管理

13年3月3日日曜日

Page 18: 20130303 idw core_data

じゃあCoreDataって何なのさ

13年3月3日日曜日

Page 19: 20130303 idw core_data

NSManagedObjectModel

じゃあCoreDataって何なのさ

13年3月3日日曜日

Page 20: 20130303 idw core_data

NSManagedObjectModel

じゃあCoreDataって何なのさ

データの構造を管理13年3月3日日曜日

Page 21: 20130303 idw core_data

NSManagedObjectModel

NSPersistentStoreCoordinator

じゃあCoreDataって何なのさ

データの構造を管理13年3月3日日曜日

Page 22: 20130303 idw core_data

NSManagedObjectModel

NSPersistentStoreCoordinator

じゃあCoreDataって何なのさ

データファイルを管理

13年3月3日日曜日

Page 23: 20130303 idw core_data

NSManagedObjectModel

NSPersistentStoreCoordinator

Data File

じゃあCoreDataって何なのさ

データファイルを管理

13年3月3日日曜日

Page 24: 20130303 idw core_data

NSManagedObjectModel

NSManagedObjectContext NSPersistentStoreCoordinator

Data File

じゃあCoreDataって何なのさ

データファイルを管理

13年3月3日日曜日

Page 25: 20130303 idw core_data

NSManagedObjectModel

NSManagedObjectContext NSPersistentStoreCoordinator

Data File

じゃあCoreDataって何なのさ

データの操作を管理

13年3月3日日曜日

Page 26: 20130303 idw core_data

NSManagedObjectModel

NSManagedObjectContext NSPersistentStoreCoordinator

Application Program

Data File

じゃあCoreDataって何なのさ

データの操作を管理

13年3月3日日曜日

Page 27: 20130303 idw core_data

NSManagedObjectModel

NSManagedObjectContext NSPersistentStoreCoordinator

Application Program

Data File

じゃあCoreDataって何なのさ

NSFetchRequest

13年3月3日日曜日

Page 28: 20130303 idw core_data

NSManagedObjectModel

NSManagedObjectContext NSPersistentStoreCoordinator

Application Program

Data File

じゃあCoreDataって何なのさ

NSFetchRequest

13年3月3日日曜日

Page 29: 20130303 idw core_data

NSManagedObjectModel

NSManagedObjectContext NSPersistentStoreCoordinator

Application Program

Data File

じゃあCoreDataって何なのさ

NSArray

13年3月3日日曜日

Page 30: 20130303 idw core_data

CoreDataの使い方

13年3月3日日曜日

Page 31: 20130303 idw core_data

CoreDataの使い方

新規プロジェクトでMaster-Detail Applicationを選んで、

Use Core Dataにチェックをつけよう

13年3月3日日曜日

Page 32: 20130303 idw core_data

CoreData使うといいことあるの?

13年3月3日日曜日

Page 33: 20130303 idw core_data

CoreData使うといいことあるの?

•開発が楽、試行錯誤しやすい

13年3月3日日曜日

Page 34: 20130303 idw core_data

CoreData使うといいことあるの?

•開発が楽、試行錯誤しやすい

•データを適度にキャッシュしてくれる

13年3月3日日曜日

Page 35: 20130303 idw core_data

CoreData使うといいことあるの?

•開発が楽、試行錯誤しやすい

•データを適度にキャッシュしてくれる

• NSFetchedResultsControllerが使える

13年3月3日日曜日

Page 36: 20130303 idw core_data

NSFetchedResultsController?

13年3月3日日曜日

Page 37: 20130303 idw core_data

NSFetchedResultsController?

• CoreDataのデータの変更を監視してアプリケーションに通知してくれるオブジェクト

13年3月3日日曜日

Page 38: 20130303 idw core_data

つまり?

13年3月3日日曜日

Page 39: 20130303 idw core_data

つまり?

•データ駆動型プログラミングをサポート

13年3月3日日曜日

Page 40: 20130303 idw core_data

データ駆動型プログラミングってなに?

13年3月3日日曜日

Page 41: 20130303 idw core_data

データ駆動?

13年3月3日日曜日

Page 42: 20130303 idw core_data

イベント駆動?

13年3月3日日曜日

Page 43: 20130303 idw core_data

User

イベント駆動?

13年3月3日日曜日

Page 44: 20130303 idw core_data

User

イベント駆動?

13年3月3日日曜日

Page 45: 20130303 idw core_data

Event

User

イベント駆動?

13年3月3日日曜日

Page 46: 20130303 idw core_data

Event

User

Display

イベント駆動?

13年3月3日日曜日

Page 47: 20130303 idw core_data

Event

User

Display

DataIO

イベント駆動?

13年3月3日日曜日

Page 48: 20130303 idw core_data

Event

User

Data File

Display

DataIO

イベント駆動?

13年3月3日日曜日

Page 49: 20130303 idw core_data

Event

User

Data File

Display

DataIO

イベント駆動?

13年3月3日日曜日

Page 50: 20130303 idw core_data

Event

User

Data File

Display

DataIO

イベント駆動?

13年3月3日日曜日

Page 51: 20130303 idw core_data

DisplayEvent

DataIO

User

Data File

イベント駆動の面倒な所

13年3月3日日曜日

Page 52: 20130303 idw core_data

DisplayEvent

DataIO

User

Data File

Event2

イベント駆動の面倒な所

13年3月3日日曜日

Page 53: 20130303 idw core_data

DisplayEvent

DataIO

User

Data File

Event2

DataIO

イベント駆動の面倒な所

13年3月3日日曜日

Page 54: 20130303 idw core_data

DisplayEvent

DataIO

User

Data File

Event2

DataIO

イベント駆動の面倒な所

13年3月3日日曜日

Page 55: 20130303 idw core_data

DisplayEvent

DataIO

User

Data File

Event2

DataIO

イベント駆動の面倒な所

13年3月3日日曜日

Page 56: 20130303 idw core_data

DisplayEvent

DataIO

User

Data File

Event2

DataIO

何か前も同じ様なこと書いたぞ?

イベント駆動の面倒な所

13年3月3日日曜日

Page 57: 20130303 idw core_data

DisplayEvent

DataIO

User

Data File

イベント駆動の面倒な所

13年3月3日日曜日

Page 58: 20130303 idw core_data

DisplayEvent

DataIO

User

Data File

Event3

イベント駆動の面倒な所

13年3月3日日曜日

Page 59: 20130303 idw core_data

DisplayEvent

DataIO

User

Data File

Event3

イベント駆動の面倒な所

13年3月3日日曜日

Page 60: 20130303 idw core_data

DisplayEvent

DataIO

User

Data File

Event3

イベント駆動の面倒な所

DataIO

13年3月3日日曜日

Page 61: 20130303 idw core_data

DisplayEvent

DataIO

User

Data File

Event3

イベント駆動の面倒な所

DataIO

13年3月3日日曜日

Page 62: 20130303 idw core_data

DisplayEvent

DataIO

User

Data File

Event3

Event自体は画面と関係ないぞ?

イベント駆動の面倒な所

DataIO

13年3月3日日曜日

Page 63: 20130303 idw core_data

User

データ駆動?

13年3月3日日曜日

Page 64: 20130303 idw core_data

User

データ駆動?

13年3月3日日曜日

Page 65: 20130303 idw core_data

Event

User

データ駆動?

13年3月3日日曜日

Page 66: 20130303 idw core_data

Event

User

データ駆動?

13年3月3日日曜日

Page 67: 20130303 idw core_data

Event

DataIO

User

データ駆動?

13年3月3日日曜日

Page 68: 20130303 idw core_data

Event

DataIO

User

データ駆動?

13年3月3日日曜日

Page 69: 20130303 idw core_data

Event

DataIO

User

Data File

データ駆動?

13年3月3日日曜日

Page 70: 20130303 idw core_data

Event

DataIO

User

Data File

データ駆動?

13年3月3日日曜日

Page 71: 20130303 idw core_data

Event

DataIO

User

Data File

Data Manager

データ駆動?

13年3月3日日曜日

Page 72: 20130303 idw core_data

Event

DataIO

User

Data File

Data Manager

データ駆動?

13年3月3日日曜日

Page 73: 20130303 idw core_data

Display

Event

DataIO

User

Data File

Data Manager

データ駆動?

13年3月3日日曜日

Page 74: 20130303 idw core_data

Display

Event

DataIO

User

Data File

Data Manager

データ駆動?

13年3月3日日曜日

Page 75: 20130303 idw core_data

Display

Event

DataIO

User

Data File

Event2Data Manager

データ駆動?

13年3月3日日曜日

Page 76: 20130303 idw core_data

Display

Event

DataIO

User

Data File

Event2Data Manager

データ駆動?

13年3月3日日曜日

Page 77: 20130303 idw core_data

Display

Event

DataIO

User

Data File

Event2

DataIO

Data Manager

データ駆動?

13年3月3日日曜日

Page 78: 20130303 idw core_data

Display

Event

DataIO

User

Data File

Event2

DataIO

Data Manager

データ駆動?

13年3月3日日曜日

Page 79: 20130303 idw core_data

Display

Event

DataIO

User

Data File

Event2

DataIO

Data Manager

すっきり!

データ駆動?

13年3月3日日曜日

Page 80: 20130303 idw core_data

Display

Event

DataIO

User

Data File

Event2

DataIO

Data Manager

だが待て!

データ駆動?

13年3月3日日曜日

Page 81: 20130303 idw core_data

Display

Event

DataIO

User

Data File

Event2

DataIO

Data Manager

これ、実装大変じゃない?

データ駆動?

13年3月3日日曜日

Page 82: 20130303 idw core_data

NSFetchedResultsController

データ駆動!Display

Event

DataIO

User

Data File

Event2

DataIO

13年3月3日日曜日

Page 83: 20130303 idw core_data

どうやって実装するの?

13年3月3日日曜日

Page 84: 20130303 idw core_data

- (void)controllerWillChangeContent:(NSFetchedResultsController *)controller

- (void)controller:(NSFetchedResultsController *)controller didChangeSection:(id <NSFetchedResultsSectionInfo>)sectionInfo atIndex:(NSUInteger)sectionIndex forChangeType:(NSFetchedResultsChangeType)type

- (void)controller:(NSFetchedResultsController *)controller didChangeObject:(id)anObject atIndexPath:(NSIndexPath *)indexPath forChangeType:(NSFetchedResultsChangeType)type newIndexPath:(NSIndexPath *)newIndexPath

- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller

NSFetchedResultsControllerが提供するdelegate

13年3月3日日曜日

Page 85: 20130303 idw core_data

- (void)controllerWillChangeContent:(NSFetchedResultsController *)controller

NSFetchedResultsControllerが提供するdelegate

データの更新が開始される際に呼ばれる

13年3月3日日曜日

Page 86: 20130303 idw core_data

- (void)controller:(NSFetchedResultsController *)controller didChangeSection:(id <NSFetchedResultsSectionInfo>)sectionInfo atIndex:(NSUInteger)sectionIndex forChangeType:(NSFetchedResultsChangeType)type

NSFetchedResultsControllerが提供するdelegate

セクションに更新があった際に呼ばれる

13年3月3日日曜日

Page 87: 20130303 idw core_data

- (void)controller:(NSFetchedResultsController *)controller didChangeObject:(id)anObject atIndexPath:(NSIndexPath *)indexPath forChangeType:(NSFetchedResultsChangeType)type newIndexPath:(NSIndexPath *)newIndexPath

NSFetchedResultsControllerが提供するdelegate

データに更新があった際に呼ばれる

13年3月3日日曜日

Page 88: 20130303 idw core_data

- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller

NSFetchedResultsControllerが提供するdelegate

データの更新が完了した際に呼ばれる

13年3月3日日曜日

Page 89: 20130303 idw core_data

- (void)controller:(NSFetchedResultsController *)controller didChangeObject:(id)anObject atIndexPath:(NSIndexPath *)indexPath forChangeType:(NSFetchedResultsChangeType)type newIndexPath:(NSIndexPath *)newIndexPath

ここで画面のデータを更新

13年3月3日日曜日

Page 90: 20130303 idw core_data

- (void)controller:(NSFetchedResultsController *)controller didChangeObject:(id)anObject atIndexPath:(NSIndexPath *)indexPath forChangeType:(NSFetchedResultsChangeType)type newIndexPath:(NSIndexPath *)newIndexPath

ここで画面のデータを更新

更新のあったオブジェクト

13年3月3日日曜日

Page 91: 20130303 idw core_data

- (void)controller:(NSFetchedResultsController *)controller didChangeObject:(id)anObject atIndexPath:(NSIndexPath *)indexPath forChangeType:(NSFetchedResultsChangeType)type newIndexPath:(NSIndexPath *)newIndexPath

ここで画面のデータを更新

更新のあったオブジェクト

更新された行

13年3月3日日曜日

Page 92: 20130303 idw core_data

- (void)controller:(NSFetchedResultsController *)controller didChangeObject:(id)anObject atIndexPath:(NSIndexPath *)indexPath forChangeType:(NSFetchedResultsChangeType)type newIndexPath:(NSIndexPath *)newIndexPath

ここで画面のデータを更新

更新のあったオブジェクト

更新された行 変更タイプ(C-UD+M)

13年3月3日日曜日

Page 93: 20130303 idw core_data

- (void)controller:(NSFetchedResultsController *)controller didChangeObject:(id)anObject atIndexPath:(NSIndexPath *)indexPath forChangeType:(NSFetchedResultsChangeType)type newIndexPath:(NSIndexPath *)newIndexPath

ここで画面のデータを更新

更新のあったオブジェクト

更新された行 変更タイプ(C-UD+M)移動後の行

13年3月3日日曜日

Page 94: 20130303 idw core_data

NSFetchedResultsControllerってUITableViewのための物じゃ?

13年3月3日日曜日

Page 95: 20130303 idw core_data

NSFetchedResultsControllerってUITableViewのための物じゃ?

それだけじゃもったいない

13年3月3日日曜日

Page 96: 20130303 idw core_data

ほんとに?

13年3月3日日曜日

Page 98: 20130303 idw core_data

注意!

13年3月3日日曜日

Page 99: 20130303 idw core_data

注意!

•オブジェクトのどの属性に更新があったかは分からない

13年3月3日日曜日

Page 100: 20130303 idw core_data

注意!

•オブジェクトのどの属性に更新があったかは分からない

•ゲームなど応答速度にシビアなアプリケーションには向かない

13年3月3日日曜日

Page 101: 20130303 idw core_data

注意!

•オブジェクトのどの属性に更新があったかは分からない

•ゲームなど応答速度にシビアなアプリケーションには向かない

• didChangeObjectのコールが連打されるケースがある

13年3月3日日曜日

Page 102: 20130303 idw core_data

ご清聴ありがとうございました

13年3月3日日曜日