2. Agenda
● Overview
● Core Data stack
● Data Model Editor
○ Entity
○ Attributes
○ Relationships
● Creating and Saving Managed Objects
● Fetching Objects
● Reference
3. Core Data Overview
● Core Data is a framework that you use to manage the model layer objects
in your application.
● Core Data's focus is on objects rather than the traditional table-driven
relational database approach.
● Core Data typically decreases by 50 to 70 percent the amount of code you
write to support the model layer.
4. Different between SQLite and Core Data
● SQLite
○ SQLite is, as advertised, lightweight.
○ SQLite uses less memory and storage space.
○ SQLite can be tedious and error-prone to code.
○ SQLite is supported on Android and Microsoft Windows Phone.
● Core Data
○ Longer learning curve: it takes some study to understand.
○ Objects are easier to work with.
○ Underlying storage details are handled atomically (support for iCloud).
○ Undo and Redo features.
14. Attribute Type
Name Value Validation
Undefined - -
Integer 16 -32768 ~ 32767 Range, Default Value
Integer 32 -2147483648 ~ 2147483647 Range, Default Value
Integer 64
–9223372036854775808 ~
9223372036854775807
Range, Default Value
Decimal base-10 arithmetic Range, Default Value
Double 64-bit floating-point number Range, Default Value
15. Attribute Type
Name Value Validation
Float 32-bit floating-point number Range, Default Value
String String
String Length, Default Value,
Regular expression
Boolean true or false Default Value
Date Date Date range, Default Date
Binary Data NSData -
Transformable
NSValueTransformer to convert
to/from NSData
-
37. Saving NSManagedObject Instances
do {
try managedObjectContext.save()
} catch {
let nserror = error as NSError
NSLog("Unresolved error (nserror), (nserror.userInfo)")
abort()
}
38. Fetching NSManagedObject Instances
let fetchRequest = NSFetchRequest<Groups>(entityName: "Groups")
do {
let fetchedGroups = try
managedObjectContext.fetch(fetchRequest)
} catch {
fatalError("Failed to fetch groups: (error)")
}
39. Filtering Results
let fetchRequest = NSFetchRequest<Groups>(entityName: "Groups")
let groupName = "Figures"
fetchRequest.predicate = NSPredicate(format: "filterGroupName ==
%@", groupName)
managedObjectContext.fetch(fetchRequest)
40. Sorting Results
let fetchRequest = NSFetchRequest<Groups>(entityName: "Groups")
let sortDescriptor = NSSortDescriptor(key: "rank", ascending: true)
fetchRequest.sortDescriptors = [sortDescriptor]
managedObjectContext.fetch(fetchRequest)
41. Updating Objects
let fetchRequest = NSFetchRequest<Groups>(entityName: "Groups")
fetchRequest.predicate = NSPredicate(format: "filterGroupKey ==
%@", groupKey)
let groups = managedObjectContext.fetch(fetchRequest)
if groups.count > 0 {
groups[0].rank = 10
}
42. Deleting Objects
let fetchRequest = NSFetchRequest<Groups>(entityName: "Groups")
fetchRequest.predicate = NSPredicate(format: "filterGroupKey ==
%@", groupKey)
let groups = managedObjectContext.fetch(fetchRequest)
for group in groups {
managedObjectContext.deleteObject(group)
}
43. Reference
● The Swift Programming Language (Swift 3.0.1)
● Core Data Programming Guide
● iOS Data Storage: Core Data vs. SQLite
● Core Data Relationships and Delete Rules
● Core-data-fundamentals
● 【Swift】Core Dataの使い方。