Lock in $30 Savings on PRO—Offer Ends Soon! ⏳
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Everyday CoreData
Search
Pat Zearfoss
March 16, 2016
Technology
0
81
Everyday CoreData
My CoreData talk at CodersOnly on March 16, 2016
Pat Zearfoss
March 16, 2016
Tweet
Share
More Decks by Pat Zearfoss
See All by Pat Zearfoss
CircleBack and WWDC 2015
pzearfoss
0
34
Other Decks in Technology
See All in Technology
Bedrock AgentCore Memoryの新機能 (Episode) を試してみた / try Bedrock AgentCore Memory Episodic functionarity
hoshi7_n
2
1.5k
フルカイテン株式会社 エンジニア向け採用資料
fullkaiten
0
9.9k
ExpoのインダストリーブースでみたAWSが見せる製造業の未来
hamadakoji
0
180
Bedrock AgentCore Evaluationsで学ぶLLM as a judge入門
shichijoyuhi
0
100
事業の財務責任に向き合うリクルートデータプラットフォームのFinOps
recruitengineers
PRO
2
160
AIBuildersDay_track_A_iidaxs
iidaxs
4
930
AI時代のワークフロー設計〜Durable Functions / Step Functions / Strands Agents を添えて〜
yakumo
3
1.8k
Building Serverless AI Memory with Mastra × AWS
vvatanabe
0
200
Amazon Bedrock Knowledge Bases × メタデータ活用で実現する検証可能な RAG 設計
tomoaki25
6
2k
AWS re:Invent 2025~初参加の成果と学び~
kubomasataka
0
170
2025年 開発生産「可能」性向上報告 サイロ解消からチームが能動性を獲得するまで/ 20251216 Naoki Takahashi
shift_evolve
PRO
2
210
子育てで想像してなかった「見えないダメージ」 / Unforeseen "hidden burdens" of raising children.
pauli
2
310
Featured
See All Featured
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
0
320
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.3k
Building a Scalable Design System with Sketch
lauravandoore
463
34k
Paper Plane (Part 1)
katiecoart
PRO
0
1.9k
Six Lessons from altMBA
skipperchong
29
4.1k
Designing for humans not robots
tammielis
254
26k
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
24
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
140
Exploring anti-patterns in Rails
aemeredith
2
200
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
Practical Orchestrator
shlominoach
190
11k
The Pragmatic Product Professional
lauravandoore
37
7.1k
Transcript
Everyday CoreData Pat Zearfoss
About Me • Pat Zearfoss • CircleBack on the app
store • Running on a CoreData stack for better than a year. • @patzearfoss on Twitter.
End User License Agreement • My suggestions may not be
100% right for all situations • CoreData elicits a lot of opinions in the community. • Your app may not fit the same patterns and models
Lets Go
Things I’ll talk about • Frameworks and tools • Model
design • App architecture • Testing • Debugging tools
CoreData Review
CoreData Review • A way of persisting data in Cocoa
applications • Not a database • Well, it kind of is, but not necessarily • On label usage is “object graph persistence”
Object Graph
CoreData Pieces • NSManagedObjectModel • NSPesistentStoreCoordinator • NSManagedObjectContext • NSManagedObject
Tip #1 Once you understand CoreData, use a framework (or
write one) to make life easier.
There’s tons • Magical Record • BNRCoreData • RestKit
Why • It’ll help you simplify all the stuff you’ll
do anyway. • CoreData can be . . . wordy.
Creating a new instance if let eDesc = NSEntityDescription.entityForName(“Contact”, inManagedObjectContext:
context) { let contact1 = Contact(entity: contactDescription, insertIntoManagedObjectContext:context) }
A basic fetch let fetchRequest = NSFetchRequest(entityName: “Contact”) fetchRequest.sortDescriptors =
[NSSortDescriptor(key: “lastName”, ascending: true)] fetchRequest.predicate = NSPredicate(format: “isFavorite = YES”) if let context = context { do { try contacts = context. executeFetchRequest(fetchRequest) as! [Contact] } catch { print (“couldn’t load contacts”) } }
The app delegate eyebleed
Creating an instance - MR if let contact1 = Contact.MR_createEntityInContext(context)
Fetch if let fetchedContacts = Contact.MR_findAllSortedBy(“lastName”, ascending: true, inContext: context) as? [Contact]
Eyebleed cured MagicalRecord.setupCoreDataStack()
Demo 1
More tools • SimPholders • CoreDataEditor • SQLPro or other
Sqlite tool
Modeling • Your managed model is a database, but it
also isn’t. You have to make it work right for you.
Tip #2 Design for your app. Don’t feel the need
to appease the database gods.
Demo 2
Tip #3 Use NSManagedObjectContexts liberally • Creating a new context
to fetch objects, passing the ids to a main context for use on the UI. • Doing expensive operations in background queues • Creating a throw-away editing context.
Demo 3
Tip #4 NSFetchedResultsController can be your best friend • NSFetchedResultsController
manages the results of a fetch into a context.
NSFetchedResultsController • Keeping a UI updated with changes from the
internet. • Use fetched results controllers to manage all communication with a web backend.
Demo 4
Architectural patterns from fetched results controllers
None
Testing • You don’t really care about persistence • You
just want to test this object, controller, view model, etc.
Tip #5 Use an in-memory store for testing • Sets
up the same scheme you have in memory. • Quick and easy to set up an tear down between tests
Demo 5
Debugging
Tip #6 Learn and use the CoreData environment variables
Useful environment variables • com.apple.CoreData.SQLDebug [1,2,3] • com.apple.CoreData.SyntaxColoredLogging 1 •
com.apple.CoreData.ConcurrencyDebug 1 • (not ThreadDebug) • com.apple.CoreData.MigrationDebug
Demo 6
Tip #7 Use the CoreData tool in instruments
Demo 7 CircleBack App
Tip #8 Other people have really good ideas • Saul
Mora - original author of MagicalRecord • Marcus Zarra - wrote many a book on CoreData • objc.io on CoreData • WWDC Material (obvi)
Recap • Find a good framework to help you. •
Design a model that fits your app’s needs • Make use of NSManagedObjectContext • Use NSFetchedResultsControllers
Recap • Use in memory stores for testing • CoreData
runtime arguments are your friend • Make use of Instruments • Read good material
?s and Thanks! •
[email protected]
• @patzearfoss