Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Core Data in Motion - NSScotland

Core Data in Motion - NSScotland

Have you tried to use CoreData in RubyMotion, only to get lost in the quagmire of simplistic or confusing examples, DSL's and gems? Have you been asking yourself these questions: Do I have to use XCode to create a CoreData model?; How do relationships work in code work anyway?; How do I pre-load data into my CoreData store?; What is an NSFetchedResultsController, and why do I need one?

We'll delve into each of these questions, and review the surprisingly simple, elegant solutions that RubyMotion can provide.

Lori M Olson

October 19, 2013
Tweet

More Decks by Lori M Olson

Other Decks in Programming

Transcript

  1. Who? • Lori M Olson • @wndxlori • on Github

    too • and ADN Monday, 21 October, 13
  2. i Develop • Ruby (mostly) • Rails • iOS (RubyMotion)

    • JRuby • Javascript (some) • jQuery • Maps/Charts • Javascript Testing Monday, 21 October, 13
  3. i Teach • Ruby on Rails for Real Developers (RoR4Real)

    • Rails for iOS Developers (Rails4iOS) • Ladies Learning Code - Ruby Introduction Monday, 21 October, 13
  4. i Speak • 2013 • RubyConf AU, NSScotland • 2012

    • Confoo, RailsConf, Aloha RubyConf • 2011 • jQueryConf, Madison Ruby • 2010 • Conferencia Rails • 2009 • RailsConf Monday, 21 October, 13
  5. The Story • To rewrite a (mobile) web application (WIMBY)

    as an iOS application • Using RubyMotion • WIMBY = Wells In My Back Yard Monday, 21 October, 13
  6. The Challenges • LOTS of data • On a Map

    • In a list (table view) • Filtering by location Monday, 21 October, 13
  7. Problems • RubyMotion gems/DSL’s hide a lot • Straight iOS

    Objective-C development relies on Xcode magic (hides a lot) • Complex data is complex • Large data is large • What do I do when I reach the limitations of these solutions? Monday, 21 October, 13
  8. The Real Problem • Sometimes you just need to understand

    how to solve problems at the most basic API code level, and the abstractions (and magic) just get in the way Monday, 21 October, 13
  9. What? • Models (entities) in code • Relationships in code

    • Loading data • Optimization Monday, 21 October, 13
  10. Models in Code • Hey, isn’t there a sample app

    for that? • Locations • https://github.com/HipByte/ RubyMotionSamples/tree/master/ios/ Locations • MVCS pattern Monday, 21 October, 13
  11. Overly simplistic • Doesn’t work with multiple models with relationships

    • You need a reference to an entity, to define a relationship fully Monday, 21 October, 13
  12. Solution • Define your entities. First. • Lazily! define your

    entities’ properties • properties = (attributes and relationships) Monday, 21 October, 13
  13. Another example • Ray Wenderlich’s Failed Bank example has 2

    models • So let’s just start there Monday, 21 October, 13
  14. Relationships • Done • With that, you can pretty much

    define any kind of model and relationship you want, in code, no magic required. Monday, 21 October, 13
  15. iOS Core Data Basics • Back to Ray • http://www.raywenderlich.com/12170/core-

    data-tutorial-how-to-preloadimport- existing-data-updated Monday, 21 October, 13
  16. That won’t work • Read in the whole file first?!?

    • add, save, add, save • horribly inefficient for large data loads • add, add, add ...., save once • yah, never mind • add, add, add, save, add, add, add, save • better, but still fails on out-of-memory Monday, 21 October, 13
  17. Back to Core Data Basics • Thankfully, Ray figured that

    out. • Updated the tutorial to operate as an OS X (console) app. • RubyMotion can do that, too. Monday, 21 October, 13
  18. Back to Basics (again) • Ray sure has a lot

    of good material, doesn’t he? • http://www.raywenderlich.com/999/core- data-tutorial-for-ios-how-to-use- nsfetchedresultscontroller Monday, 21 October, 13
  19. Why? • NSFetchedResultsController gives us huge performance benefits • Avoids

    loading all the data in memory at once Monday, 21 October, 13
  20. That’s All, Folks! • Questions? Comments? • https://github.com/wndxlori/ WNDXRubyMotion/tree/master/FailedBankCD •

    @wndxlori • [email protected] • http://www.linkedin.com/in/loriolson • http://www.wndx.com Monday, 21 October, 13
  21. Core Data in Motion • It’s an ebook! • Early

    pre-release • http://coredatainmotion.com Monday, 21 October, 13