20130303 idw core_data

Post on 24-Jun-2015

2.892 Views

Category:

Technology

2 Downloads

Preview:

Click to see full reader

DESCRIPTION

第十八回 iPhone Developer Workshop発表資料

TRANSCRIPT

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

Shinji KobayashiGentleSoft

13年3月3日日曜日

Name:Shinji Kobayashi

Twitter:@gentlejkov

GentleSoft

Who are you?

http://gentlesoft.net

13年3月3日日曜日

Who are you?

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

アジェンダ

13年3月3日日曜日

アジェンダ

• CoreDataってなに?

13年3月3日日曜日

アジェンダ

• CoreDataってなに?

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

13年3月3日日曜日

アジェンダ

• CoreDataってなに?

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

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

13年3月3日日曜日

CoreDataってなに?

13年3月3日日曜日

CoreDataとは何か

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

13年3月3日日曜日

CoreDataとは何でないか

• not DataBase

• not ORM

13年3月3日日曜日

not DataBase ?

13年3月3日日曜日

not ORM ?

13年3月3日日曜日

じゃあCoreDataって何なのさ

13年3月3日日曜日

じゃあCoreDataって何なのさ

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

13年3月3日日曜日

じゃあCoreDataって何なのさ

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

NSManagedObjectContextデータの操作を管理

13年3月3日日曜日

じゃあCoreDataって何なのさ

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

NSManagedObjectContextデータの操作を管理

 NSManagedObjectModelデータの構造を管理

13年3月3日日曜日

じゃあCoreDataって何なのさ

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

NSManagedObjectContextデータの操作を管理

 NSPersistentStoreCoordinatorデータファイルを管理

 NSManagedObjectModelデータの構造を管理

13年3月3日日曜日

じゃあCoreDataって何なのさ

13年3月3日日曜日

NSManagedObjectModel

じゃあCoreDataって何なのさ

13年3月3日日曜日

NSManagedObjectModel

じゃあCoreDataって何なのさ

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

NSManagedObjectModel

NSPersistentStoreCoordinator

じゃあCoreDataって何なのさ

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

NSManagedObjectModel

NSPersistentStoreCoordinator

じゃあCoreDataって何なのさ

データファイルを管理

13年3月3日日曜日

NSManagedObjectModel

NSPersistentStoreCoordinator

Data File

じゃあCoreDataって何なのさ

データファイルを管理

13年3月3日日曜日

NSManagedObjectModel

NSManagedObjectContext NSPersistentStoreCoordinator

Data File

じゃあCoreDataって何なのさ

データファイルを管理

13年3月3日日曜日

NSManagedObjectModel

NSManagedObjectContext NSPersistentStoreCoordinator

Data File

じゃあCoreDataって何なのさ

データの操作を管理

13年3月3日日曜日

NSManagedObjectModel

NSManagedObjectContext NSPersistentStoreCoordinator

Application Program

Data File

じゃあCoreDataって何なのさ

データの操作を管理

13年3月3日日曜日

NSManagedObjectModel

NSManagedObjectContext NSPersistentStoreCoordinator

Application Program

Data File

じゃあCoreDataって何なのさ

NSFetchRequest

13年3月3日日曜日

NSManagedObjectModel

NSManagedObjectContext NSPersistentStoreCoordinator

Application Program

Data File

じゃあCoreDataって何なのさ

NSFetchRequest

13年3月3日日曜日

NSManagedObjectModel

NSManagedObjectContext NSPersistentStoreCoordinator

Application Program

Data File

じゃあCoreDataって何なのさ

NSArray

13年3月3日日曜日

CoreDataの使い方

13年3月3日日曜日

CoreDataの使い方

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

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

13年3月3日日曜日

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

13年3月3日日曜日

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

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

13年3月3日日曜日

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

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

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

13年3月3日日曜日

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

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

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

• NSFetchedResultsControllerが使える

13年3月3日日曜日

NSFetchedResultsController?

13年3月3日日曜日

NSFetchedResultsController?

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

13年3月3日日曜日

つまり?

13年3月3日日曜日

つまり?

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

13年3月3日日曜日

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

13年3月3日日曜日

データ駆動?

13年3月3日日曜日

イベント駆動?

13年3月3日日曜日

User

イベント駆動?

13年3月3日日曜日

User

イベント駆動?

13年3月3日日曜日

Event

User

イベント駆動?

13年3月3日日曜日

Event

User

Display

イベント駆動?

13年3月3日日曜日

Event

User

Display

DataIO

イベント駆動?

13年3月3日日曜日

Event

User

Data File

Display

DataIO

イベント駆動?

13年3月3日日曜日

Event

User

Data File

Display

DataIO

イベント駆動?

13年3月3日日曜日

Event

User

Data File

Display

DataIO

イベント駆動?

13年3月3日日曜日

DisplayEvent

DataIO

User

Data File

イベント駆動の面倒な所

13年3月3日日曜日

DisplayEvent

DataIO

User

Data File

Event2

イベント駆動の面倒な所

13年3月3日日曜日

DisplayEvent

DataIO

User

Data File

Event2

DataIO

イベント駆動の面倒な所

13年3月3日日曜日

DisplayEvent

DataIO

User

Data File

Event2

DataIO

イベント駆動の面倒な所

13年3月3日日曜日

DisplayEvent

DataIO

User

Data File

Event2

DataIO

イベント駆動の面倒な所

13年3月3日日曜日

DisplayEvent

DataIO

User

Data File

Event2

DataIO

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

イベント駆動の面倒な所

13年3月3日日曜日

DisplayEvent

DataIO

User

Data File

イベント駆動の面倒な所

13年3月3日日曜日

DisplayEvent

DataIO

User

Data File

Event3

イベント駆動の面倒な所

13年3月3日日曜日

DisplayEvent

DataIO

User

Data File

Event3

イベント駆動の面倒な所

13年3月3日日曜日

DisplayEvent

DataIO

User

Data File

Event3

イベント駆動の面倒な所

DataIO

13年3月3日日曜日

DisplayEvent

DataIO

User

Data File

Event3

イベント駆動の面倒な所

DataIO

13年3月3日日曜日

DisplayEvent

DataIO

User

Data File

Event3

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

イベント駆動の面倒な所

DataIO

13年3月3日日曜日

User

データ駆動?

13年3月3日日曜日

User

データ駆動?

13年3月3日日曜日

Event

User

データ駆動?

13年3月3日日曜日

Event

User

データ駆動?

13年3月3日日曜日

Event

DataIO

User

データ駆動?

13年3月3日日曜日

Event

DataIO

User

データ駆動?

13年3月3日日曜日

Event

DataIO

User

Data File

データ駆動?

13年3月3日日曜日

Event

DataIO

User

Data File

データ駆動?

13年3月3日日曜日

Event

DataIO

User

Data File

Data Manager

データ駆動?

13年3月3日日曜日

Event

DataIO

User

Data File

Data Manager

データ駆動?

13年3月3日日曜日

Display

Event

DataIO

User

Data File

Data Manager

データ駆動?

13年3月3日日曜日

Display

Event

DataIO

User

Data File

Data Manager

データ駆動?

13年3月3日日曜日

Display

Event

DataIO

User

Data File

Event2Data Manager

データ駆動?

13年3月3日日曜日

Display

Event

DataIO

User

Data File

Event2Data Manager

データ駆動?

13年3月3日日曜日

Display

Event

DataIO

User

Data File

Event2

DataIO

Data Manager

データ駆動?

13年3月3日日曜日

Display

Event

DataIO

User

Data File

Event2

DataIO

Data Manager

データ駆動?

13年3月3日日曜日

Display

Event

DataIO

User

Data File

Event2

DataIO

Data Manager

すっきり!

データ駆動?

13年3月3日日曜日

Display

Event

DataIO

User

Data File

Event2

DataIO

Data Manager

だが待て!

データ駆動?

13年3月3日日曜日

Display

Event

DataIO

User

Data File

Event2

DataIO

Data Manager

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

データ駆動?

13年3月3日日曜日

NSFetchedResultsController

データ駆動!Display

Event

DataIO

User

Data File

Event2

DataIO

13年3月3日日曜日

どうやって実装するの?

13年3月3日日曜日

- (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日日曜日

- (void)controllerWillChangeContent:(NSFetchedResultsController *)controller

NSFetchedResultsControllerが提供するdelegate

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

13年3月3日日曜日

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

NSFetchedResultsControllerが提供するdelegate

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

13年3月3日日曜日

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

NSFetchedResultsControllerが提供するdelegate

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

13年3月3日日曜日

- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller

NSFetchedResultsControllerが提供するdelegate

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

13年3月3日日曜日

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

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

13年3月3日日曜日

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

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

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

13年3月3日日曜日

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

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

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

更新された行

13年3月3日日曜日

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

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

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

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

13年3月3日日曜日

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

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

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

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

13年3月3日日曜日

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

13年3月3日日曜日

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

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

13年3月3日日曜日

ほんとに?

13年3月3日日曜日

注意!

13年3月3日日曜日

注意!

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

13年3月3日日曜日

注意!

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

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

13年3月3日日曜日

注意!

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

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

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

13年3月3日日曜日

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

13年3月3日日曜日

top related