Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

20130303 idw core_data

3,831 views

Published on

第十八回 iPhone Developer Workshop発表資料

Published in: Technology
  • Be the first to comment

20130303 idw core_data

  1. 1. CoreDataによる データ駆動型 プログラミング Shinji Kobayashi GentleSoft13年3月3日日曜日
  2. 2. Who are you? Name:Shinji Kobayashi Twitter:@gentlejkov GentleSoft http://gentlesoft.net13年3月3日日曜日
  3. 3. Who are you? https://medpeer.jp13年3月3日日曜日
  4. 4. アジェンダ13年3月3日日曜日
  5. 5. アジェンダ • CoreDataってなに?13年3月3日日曜日
  6. 6. アジェンダ • CoreDataってなに? • データ駆動型プログラミングって なに?13年3月3日日曜日
  7. 7. アジェンダ • CoreDataってなに? • データ駆動型プログラミングって なに? • どうやって実装するの?13年3月3日日曜日
  8. 8. CoreDataってなに?13年3月3日日曜日
  9. 9. CoreDataとは何か • Appleが提供するデータ永続化コ ンポーネント13年3月3日日曜日
  10. 10. CoreDataとは何でないか • not DataBase • not ORM13年3月3日日曜日
  11. 11. not DataBase ?13年3月3日日曜日
  12. 12. not ORM ?13年3月3日日曜日
  13. 13. じゃあCoreDataって何なのさ13年3月3日日曜日
  14. 14. じゃあCoreDataって何なのさ • CoreDataを管理するオブジェクト群13年3月3日日曜日
  15. 15. じゃあCoreDataって何なのさ • CoreDataを管理するオブジェクト群 NSManagedObjectContext データの操作を管理13年3月3日日曜日
  16. 16. じゃあCoreDataって何なのさ • CoreDataを管理するオブジェクト群 NSManagedObjectContext データの操作を管理  NSManagedObjectModel データの構造を管理13年3月3日日曜日
  17. 17. じゃあCoreDataって何なのさ • CoreDataを管理するオブジェクト群 NSManagedObjectContext データの操作を管理  NSManagedObjectModel データの構造を管理  NSPersistentStoreCoordinator データファイルを管理13年3月3日日曜日
  18. 18. じゃあCoreDataって何なのさ13年3月3日日曜日
  19. 19. じゃあCoreDataって何なのさ NSManagedObjectModel13年3月3日日曜日
  20. 20. じゃあCoreDataって何なのさ NSManagedObjectModel データの構造を管理13年3月3日日曜日
  21. 21. じゃあCoreDataって何なのさ NSPersistentStoreCoordinator NSManagedObjectModel データの構造を管理13年3月3日日曜日
  22. 22. じゃあCoreDataって何なのさ データファイルを管理 NSPersistentStoreCoordinator NSManagedObjectModel13年3月3日日曜日
  23. 23. じゃあCoreDataって何なのさ データファイルを管理 NSPersistentStoreCoordinator NSManagedObjectModel Data File13年3月3日日曜日
  24. 24. じゃあCoreDataって何なのさ データファイルを管理 NSManagedObjectContext NSPersistentStoreCoordinator NSManagedObjectModel Data File13年3月3日日曜日
  25. 25. じゃあCoreDataって何なのさ データの操作を管理 NSManagedObjectContext NSPersistentStoreCoordinator NSManagedObjectModel Data File13年3月3日日曜日
  26. 26. じゃあCoreDataって何なのさ Application Program データの操作を管理 NSManagedObjectContext NSPersistentStoreCoordinator NSManagedObjectModel Data File13年3月3日日曜日
  27. 27. じゃあCoreDataって何なのさ Application Program NSFetchRequest NSManagedObjectContext NSPersistentStoreCoordinator NSManagedObjectModel Data File13年3月3日日曜日
  28. 28. じゃあCoreDataって何なのさ Application Program NSFetchRequest NSManagedObjectContext NSPersistentStoreCoordinator NSManagedObjectModel Data File13年3月3日日曜日
  29. 29. じゃあCoreDataって何なのさ Application Program NSArray NSManagedObjectContext NSPersistentStoreCoordinator NSManagedObjectModel Data File13年3月3日日曜日
  30. 30. CoreDataの使い方13年3月3日日曜日
  31. 31. CoreDataの使い方 新規プロジェクトで Master-Detail Applicationを選んで、 Use Core Dataにチェックをつけよう13年3月3日日曜日
  32. 32. CoreData使うといいことあるの?13年3月3日日曜日
  33. 33. CoreData使うといいことあるの? • 開発が楽、試行錯誤しやすい13年3月3日日曜日
  34. 34. CoreData使うといいことあるの? • 開発が楽、試行錯誤しやすい •データを適度にキャッシュしてくれる13年3月3日日曜日
  35. 35. CoreData使うといいことあるの? • 開発が楽、試行錯誤しやすい •データを適度にキャッシュしてくれる • NSFetchedResultsControllerが使える13年3月3日日曜日
  36. 36. NSFetchedResultsController?13年3月3日日曜日
  37. 37. NSFetchedResultsController? • CoreDataのデータの変更を監視して アプリケーションに通知してくれる オブジェクト13年3月3日日曜日
  38. 38. つまり?13年3月3日日曜日
  39. 39. つまり? • データ駆動型プログラミングを サポート13年3月3日日曜日
  40. 40. データ駆動型プログラミングってなに?13年3月3日日曜日
  41. 41. データ駆動?13年3月3日日曜日
  42. 42. イベント駆動?13年3月3日日曜日
  43. 43. イベント駆動? User13年3月3日日曜日
  44. 44. イベント駆動? User13年3月3日日曜日
  45. 45. イベント駆動? User Event13年3月3日日曜日
  46. 46. イベント駆動? User Event Display13年3月3日日曜日
  47. 47. イベント駆動? User Event Display DataIO13年3月3日日曜日
  48. 48. イベント駆動? User Event Display DataIO Data File13年3月3日日曜日
  49. 49. イベント駆動? User Event Display DataIO Data File13年3月3日日曜日
  50. 50. イベント駆動? User Event Display DataIO Data File13年3月3日日曜日
  51. 51. イベント駆動の面倒な所 User Event Display DataIO Data File13年3月3日日曜日
  52. 52. イベント駆動の面倒な所 User Event Display Event2 DataIO Data File13年3月3日日曜日
  53. 53. イベント駆動の面倒な所 User Event Display Event2 DataIO DataIO Data File13年3月3日日曜日
  54. 54. イベント駆動の面倒な所 User Event Display Event2 DataIO DataIO Data File13年3月3日日曜日
  55. 55. イベント駆動の面倒な所 User Event Display Event2 DataIO DataIO Data File13年3月3日日曜日
  56. 56. イベント駆動の面倒な所 User 何か前も同じ様なこと 書いたぞ? Event Display Event2 DataIO DataIO Data File13年3月3日日曜日
  57. 57. イベント駆動の面倒な所 User Event Display DataIO Data File13年3月3日日曜日
  58. 58. イベント駆動の面倒な所 User Event Display Event3 DataIO Data File13年3月3日日曜日
  59. 59. イベント駆動の面倒な所 User Event Display Event3 DataIO Data File13年3月3日日曜日
  60. 60. イベント駆動の面倒な所 User Event Display Event3 DataIO DataIO Data File13年3月3日日曜日
  61. 61. イベント駆動の面倒な所 User Event Display Event3 DataIO DataIO Data File13年3月3日日曜日
  62. 62. イベント駆動の面倒な所 User Event自体は画面と 関係ないぞ? Event Display Event3 DataIO DataIO Data File13年3月3日日曜日
  63. 63. データ駆動? User13年3月3日日曜日
  64. 64. データ駆動? User13年3月3日日曜日
  65. 65. データ駆動? User Event13年3月3日日曜日
  66. 66. データ駆動? User Event13年3月3日日曜日
  67. 67. データ駆動? User Event DataIO13年3月3日日曜日
  68. 68. データ駆動? User Event DataIO13年3月3日日曜日
  69. 69. データ駆動? User Event DataIO Data File13年3月3日日曜日
  70. 70. データ駆動? User Event DataIO Data File13年3月3日日曜日
  71. 71. データ駆動? User Event Data Manager DataIO Data File13年3月3日日曜日
  72. 72. データ駆動? User Event Data Manager DataIO Data File13年3月3日日曜日
  73. 73. データ駆動? User Display Event Data Manager DataIO Data File13年3月3日日曜日
  74. 74. データ駆動? User Display Event Data Manager DataIO Data File13年3月3日日曜日
  75. 75. データ駆動? User Display Event Data Manager Event2 DataIO Data File13年3月3日日曜日
  76. 76. データ駆動? User Display Event Data Manager Event2 DataIO Data File13年3月3日日曜日
  77. 77. データ駆動? User Display Event Data Manager Event2 DataIO DataIO Data File13年3月3日日曜日
  78. 78. データ駆動? User Display Event Data Manager Event2 DataIO DataIO Data File13年3月3日日曜日
  79. 79. データ駆動? User Display すっきり! Event Data Manager Event2 DataIO DataIO Data File13年3月3日日曜日
  80. 80. データ駆動? User Display だが待て! Event Data Manager Event2 DataIO DataIO Data File13年3月3日日曜日
  81. 81. データ駆動? これ、実装 User Display 大変じゃない? Event Data Manager Event2 DataIO DataIO Data File13年3月3日日曜日
  82. 82. データ駆動! User Display Event NSFetchedResultsController Event2 DataIO DataIO Data File13年3月3日日曜日
  83. 83. どうやって実装するの?13年3月3日日曜日
  84. 84. NSFetchedResultsControllerが 提供するdelegate - (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 *)controller13年3月3日日曜日
  85. 85. NSFetchedResultsControllerが 提供するdelegate データの更新が開始される際に呼ばれる - (void)controllerWillChangeContent:(NSFetchedResultsController *)controller13年3月3日日曜日
  86. 86. NSFetchedResultsControllerが 提供するdelegate セクションに更新があった際に呼ばれる - (void)controller:(NSFetchedResultsController *)controller didChangeSection:(id <NSFetchedResultsSectionInfo>)sectionInfo atIndex:(NSUInteger)sectionIndex forChangeType:(NSFetchedResultsChangeType)type13年3月3日日曜日
  87. 87. NSFetchedResultsControllerが 提供するdelegate データに更新があった際に呼ばれる - (void)controller:(NSFetchedResultsController *)controller didChangeObject:(id)anObject atIndexPath:(NSIndexPath *)indexPath forChangeType:(NSFetchedResultsChangeType)type newIndexPath:(NSIndexPath *)newIndexPath13年3月3日日曜日
  88. 88. NSFetchedResultsControllerが 提供するdelegate データの更新が完了した際に呼ばれる - (void)controllerDidChangeContent:(NSFetchedResultsController *)controller13年3月3日日曜日
  89. 89. ここで画面のデータを更新 - (void)controller:(NSFetchedResultsController *)controller didChangeObject:(id)anObject atIndexPath:(NSIndexPath *)indexPath forChangeType:(NSFetchedResultsChangeType)type newIndexPath:(NSIndexPath *)newIndexPath13年3月3日日曜日
  90. 90. ここで画面のデータを更新 更新のあったオブジェクト - (void)controller:(NSFetchedResultsController *)controller didChangeObject:(id)anObject atIndexPath:(NSIndexPath *)indexPath forChangeType:(NSFetchedResultsChangeType)type newIndexPath:(NSIndexPath *)newIndexPath13年3月3日日曜日
  91. 91. ここで画面のデータを更新 更新のあったオブジェクト - (void)controller:(NSFetchedResultsController *)controller didChangeObject:(id)anObject atIndexPath:(NSIndexPath *)indexPath forChangeType:(NSFetchedResultsChangeType)type newIndexPath:(NSIndexPath *)newIndexPath 更新された行13年3月3日日曜日
  92. 92. ここで画面のデータを更新 更新のあったオブジェクト - (void)controller:(NSFetchedResultsController *)controller didChangeObject:(id)anObject atIndexPath:(NSIndexPath *)indexPath forChangeType:(NSFetchedResultsChangeType)type newIndexPath:(NSIndexPath *)newIndexPath 更新された行 変更タイプ (C-UD+M)13年3月3日日曜日
  93. 93. ここで画面のデータを更新 更新のあったオブジェクト - (void)controller:(NSFetchedResultsController *)controller didChangeObject:(id)anObject atIndexPath:(NSIndexPath *)indexPath forChangeType:(NSFetchedResultsChangeType)type newIndexPath:(NSIndexPath *)newIndexPath 更新された行 変更タイプ 移動後の行 (C-UD+M)13年3月3日日曜日
  94. 94. NSFetchedResultsControllerって UITableViewのための物じゃ?13年3月3日日曜日
  95. 95. NSFetchedResultsControllerって UITableViewのための物じゃ? それだけじゃもったいない13年3月3日日曜日
  96. 96. ほんとに?13年3月3日日曜日
  97. 97. ほんとに? https://github.com/gentlesoft/ NSFetchedResultsControllerSample13年3月3日日曜日
  98. 98. 注意!13年3月3日日曜日
  99. 99. 注意! • オブジェクトのどの属性に更新が あったかは分からない13年3月3日日曜日
  100. 100. 注意! • オブジェクトのどの属性に更新が あったかは分からない • ゲームなど応答速度にシビアなアプ リケーションには向かない13年3月3日日曜日
  101. 101. 注意! • オブジェクトのどの属性に更新が あったかは分からない • ゲームなど応答速度にシビアなアプ リケーションには向かない • didChangeObjectのコールが連打され るケースがある13年3月3日日曜日
  102. 102. ご清聴ありがとう ございました13年3月3日日曜日

×