20130303 idw core_data
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日日曜日
アジェンダ
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日日曜日
ほんとに?
https://github.com/gentlesoft/NSFetchedResultsControllerSample
13年3月3日日曜日
注意!
13年3月3日日曜日
注意!
•オブジェクトのどの属性に更新があったかは分からない
13年3月3日日曜日
注意!
•オブジェクトのどの属性に更新があったかは分からない
•ゲームなど応答速度にシビアなアプリケーションには向かない
13年3月3日日曜日
注意!
•オブジェクトのどの属性に更新があったかは分からない
•ゲームなど応答速度にシビアなアプリケーションには向かない
• didChangeObjectのコールが連打されるケースがある
13年3月3日日曜日
ご清聴ありがとうございました
13年3月3日日曜日