рдпрджрд┐ рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдЖрдк Xcode GUI рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреЛрд░рдбрддрд╛ рдореЙрдбрд▓ рдмрдирд╛рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдкрд╕рдВрдж рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдпрд╛ рдЖрдк рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рдЧрд▓ рд╣реИрдВ, рддреЛ рдореИрдВ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдЖрдкрдХрд╛ рдЖрд╡реЗрджрди .XCDataModel рдлрд╝рд╛рдЗрд▓реЛрдВ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдПрдВ рдФрд░ рдереЛрдбрд╝реА рддреЗрдЬрд╝реА рд╕реЗ рдЪрд▓рд╛рдПрдВ, рдлрд┐рд░ рдмрд┐рд▓реНрд▓реА рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИред
рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдкреГрд╖реНрдарднреВрдорд┐
рд▓рдЧрднрдЧ рдЖрдзреЗ рд╕рд╛рд▓ рдкрд╣рд▓реЗ рдореИрдВ iOS рдХреЗ рд▓рд┐рдП рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡рд┐рдХрд╕рд┐рдд рдХрд░ рд░рд╣рд╛ рдерд╛, рдФрд░ рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рдбреЗрдЯрд╛ рд╕реНрдЯреЛрд░реЗрдЬ рдХреЗ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рд╡рд┐рдХрд╛рд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реБрдЪрд╛рд░реВ рд░реВрдк рд╕реЗ рдФрд░ рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╕рдорд╕реНрдпрд╛ рдХреЗ рдЪрд▓реА рдЧрдИред
рд▓реЗрдХрд┐рди рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рдХреЛрд░рдбрд╛рдЯрд╛ рдореЙрдбрд▓ рдЖрдХрд╛рд░ рдореЗрдВ рдмрдбрд╝рд╛ рд╣реЛ рдЧрдпрд╛ рд╣реИ рдЬреЛ рдореЗрд░реЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рдЕрд╢реЛрднрдиреАрдп рд╣реИ, рдФрд░ рдЪреВрдВрдХрд┐ рдореИрдВ рдЕрдВрдзрд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдореЗрд░реЗ рд▓рд┐рдП рдЕрд░реНрдз-рджреГрд╢реНрдп рдбреЗрдЯрд╛ рдХреА рдПрдХ рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рд╢рд╛рд░реАрд░рд┐рдХ рд░реВрдк рд╕реЗ рдХрдард┐рди рд╣реИ, рдореИрдВрдиреЗ рдХреЛрд░рдбрд╛рдЯрд╛ рдХреЛ рдХреЛрдб рдХрд░рдиреЗ рд╡рд╛рд▓реА рд╕рднреА рдЪреАрдЬреЛрдВ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред
CoreData рдХреЗ рд╕рд╛рде "рдЧреИрд░-рджреГрд╢реНрдп" рдХрд╛рдо рдкрд░ рдмрд╣реБрдд рдХрдо рд╕рд╛рдордЧреНрд░реА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореЗрд░реЗ рдЖрдзреЗ рдирд┐рд╖реНрдХрд░реНрд╖ рдФрд░ рдШрдЯрдирд╛рдХреНрд░рдо рдкреНрд▓реЗрдЧреНрд░рд╛рдЙрдВрдб рдкрд░ рдкрд╛рдЧрд▓ рдкреНрд░рдпреЛрдЧреЛрдВ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИрдВ рдФрд░ Google рдЧреБрдо рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рдХрдо рдкрд╛рдЧрд▓ рдкреНрд░рдпрд╛рд╕ рдирд╣реАрдВ рд╣реИрдВред
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЪрд▓реЛ рдЪрд▓рддреЗ рд╣реИрдВ!
рдХрдХреНрд╖рд╛рдПрдВ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред
рдпрджрд┐ рдХреЛрд░рдбрд╛рдЯрд╛ рдХреЗ рд╕рд╛рде рдорд╛рдирдХ рдХрд╛рд░реНрдп рдореЗрдВ рд╣рдо рд╕рднреА рд╕рдВрд╕реНрдерд╛рдУрдВ рдФрд░ рдЙрдирдХреЗ рдмреАрдЪ рдХреЗ рд╕рдВрдмрдВрдзреЛрдВ рдХреЛ рдореЙрдбрд▓ рдХреЗ рд╕рд╛рде рдПрдХ рдЕрд▓рдЧ рдлрд╛рдЗрд▓ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд╣рдореЗрдВ рдЙрди рд╕рдВрд╕реНрдерд╛рдУрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдЬреЛ рдкрд╣рд▓реЗ рдмрддрд╛рддреА рд╣реИрдВ (рдпрд╣ рд╕рдордЭрдирд╛ рдЖрд╕рд╛рди рд╣реЛрдЧрд╛ рдХрд┐ рд╣рдо рдХреНрдпрд╛ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдФрд░ Xcode рдорджрдж рдХрд░реЗрдЧрд╛, рдкрд╣рд▓реЗ рд╕реЗ рдирд┐рд░реНрдорд┐рдд рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рдирд╛рдо рдХреЛ рд╕рдВрдХреЗрдд рджреЗрдирд╛)ред
рд╡реИрд╕реЗ, рдиреАрдЪреЗ рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рдХрдХреНрд╖рд╛ рдХреЗ рдЕрдВрдд рдореЗрдВ рдПрдХ рдЕрдЬреАрдм рдкреЛрд╕реНрдЯрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, "рдПрдордУ" - рдкреНрд░рдмрдВрдзрд┐рдд рд╡рд╕реНрддреБред рдпрд╣ рдЕрдиреНрдп, рд╕рдВрднрд╡рддрдГ рд╕рдорд╛рди, рд╡рд░реНрдЧреЛрдВ рдХреЗ рд╕рд╛рде рднреНрд░рдорд┐рдд рдирд╣реАрдВ рд╣реЛрдирд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЛрд░рдбрд╛рдЯрд╛ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдирд╣реАрдВ рд╣реИред
рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕реНрдерд┐рддрд┐ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реЗрдВрдЧреЗ:
- рдПрдХ рдХрдВрдкрдиреА рд╣реИ (рд╡рд░реНрдЧ CompanyMO рджреНрд╡рд╛рд░рд╛ рд╡рд░реНрдгрд┐рдд);
- рдХрд░реНрдордЪрд╛рд░реА рд╣реИрдВ (рд╡рд░реНрдХрд░рдореЛ рд╡рд░реНрдЧ рджреНрд╡рд╛рд░рд╛ рд╡рд░реНрдгрд┐рдд);
- рдкреНрд░рддреНрдпреЗрдХ рдХрд░реНрдордЪрд╛рд░реА рдХреЗрд╡рд▓ рдПрдХ рдХрдВрдкрдиреА рдореЗрдВ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ (рдпрд╛ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ);
- рдкреНрд░рддреНрдпреЗрдХ рдХрдВрдкрдиреА рдореЗрдВ рдХрд┐рд╕реА рднреА рдХрд░реНрдордЪрд╛рд░реА рдХреА рд╕рдВрдЦреНрдпрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ (рдЬрд┐рд╕рдореЗрдВ рдХреЛрдИ рднреА рдХрд░реНрдордЪрд╛рд░реА рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИ)ред
@objc(CompanyMO)
public class CompanyMO: NSManagedObject {
@NSManaged public var companyName: String
@NSManaged public var workers: NSSet
}
@objc(WorkerMO)
public class WorkerMO: NSManagedObject {
@NSManaged public var firstname: String
@NSManaged public var lastname: String
@NSManaged public var company: CompanyMO?
}
.
objc() тАФ , , .
objc(CompanyMO) CompanyMO , CompanyMO Objective-C CompanyMO. objc(NameOfClass) Objective-C.
тАФ @NSManaged .
@NSManaged , , . , ( Apple, ), @NSManaged coreData.
тАФ , .
, , extension .
extension NSEntityDescription {
convenience init(from classType: AnyClass) {
self.init()
self.name = NSStringFromClass(classType)
self.managedObjectClassName = NSStringFromClass(classType)
}
func addProperty(_ property: NSPropertyDescription) {
self.properties.append(property)
}
}
extension NSAttributeDescription {
convenience init(name: String, ofType: NSAttributeType, isOptional: Bool = false) {
self.init()
self.name = name
self.attributeType = ofType
self.isOptional = isOptional
}
}
.
NSEntityDescription тАФ coreData, (, ). ( , ) (managedObjectClassName), , (, тАФ CompanyMO, WorkerMO ).
, :
let company = NSEntityDescription()
company.name = "CompanyMO"
company.managedObjectClassName = "CompanyMO"
, , NSEntityDescription. , :
let company = NSEntityDescription(from: CompanyMO.self)
let worker = NSEntityDescription(from: WorkerMO.self)
, , .
( , ), .
var model: NSManagedObjectModel {
let _model = NSManagedObjectModel()
let companyEntity = NSEntityDescription(from: CompanyMO.self)
companyEntity.addProperty(NSAttributeDescription(name: "companyName", ofType: .stringAttributeType))
let workerEntity = NSEntityDescription(from: WorkerMO.self)
workerEntity.addProperty(NSAttributeDescription(name: "firstname", ofType: .stringAttributeType))
workerEntity.addPropertyNSAttributeDescription((name: "lastname", ofType: .stringAttributeType))
_model.entities = [companyEntity, workerEntity]
return _model
}
.
NSManagedObjectModel entities, NSEntityDescription.
NSManagedObjectModel.entities: [NSEntityDescription]
NSEntityDescription . , , - . , , .
NSEntityDescription , companyEntity workerEntity companyEntity.properties workerEntity.properties, NSPropertyDescription.
NSPropertyDescription NSAttributeDescription ( , , ) NSRelationshipDescription ( ).
NSRelationshipDescription .
, :
- CompanyMO WorkerMO;
- , . companyEntity companyName ( workers ), workerEntity firstname lastname.
- entities "" .
.
.
NSPersistentStore NSPersistentStoreCoordinator NSPersistentContainer (, . ).
coreData .
, ( ) .
persistentContainer .
lazy var persistentContainer: NSPersistentContainer {
let _container = NSPersistentContainer(name: "CyrmaxModel", managedObjectModel: model)
_container.loadPersistentStores {
(description, error) in
}
return _container
}
, ( ) , .
persistentContainer coreData , .
- , ;
- (- - , );
- ( , "?", ).
, , , , , .
, .
, .
WorkerMO, .
@objc(WorkerMO)
public class WorkerMO: NSManagedObject {
@NSManaged public var firstname: String
@NSManaged public var lastname: String
static private var _entityDescription: NSEntityDescription?
static func entityDescription() -> NSEntityDescription {
guard self._entityDescription == nil else {
return _entityDescription!
}
let des = NSEntityDescription(from: self)
des.addProperty(NSAttributeDescription(name: "firstname", ofType: .stringAttributeType))
des.addProperty(NSAttributeDescription(name: "lastname", ofType: .stringAttributeType))
self._entityDescription = des
return self._entityDescription!
}
}
CompanyMO ( ).
.
_entityDescription , ?
, NSRelationshipDescription .
, , CompanyMO.entityDescription() NSEntityDescription, .
coreData- тАФ . , . ( , StoryBoard, ), .
- , , StoryBoard, XCDataModel.
- NSManagedObjectModel;
- NSEntityDescription;
- NSPropertyDescription NSAttributeDescription;
- рд╡реИрдХрд▓реНрдкрд┐рдХ, рд▓реЗрдХрд┐рди рдЖрдк рдЕрднреА рднреА NSPersistentContainer рдФрд░ рдЗрд╕рдХреЗ init (рдирд╛рдо: ManageObjectModel :) initializer рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ ред