рдХреЛрдб рд╕реЗ CoreData рдореЙрдбрд▓ред рдпрд╛ "рдмрд┐рдирд╛ рдХреИрд╕реЗ рдХрд░реЗрдВ редXCDataModel" (рднрд╛рдЧ 1)

рдпрджрд┐ рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдЖрдк 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))
//      CompanyMO.workers,         
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 .


, :


  1. CompanyMO WorkerMO;
  2. , . companyEntity companyName ( workers ), workerEntity firstname lastname.
  3. 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 , .



  1. , ;
  2. (- - , );
  3. ( , "?", ).


, , , , , .


, .


, .


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.



  1. NSManagedObjectModel;
  2. NSEntityDescription;
  3. NSPropertyDescription NSAttributeDescription;
  4. рд╡реИрдХрд▓реНрдкрд┐рдХ, рд▓реЗрдХрд┐рди рдЖрдк рдЕрднреА рднреА NSPersistentContainer рдФрд░ рдЗрд╕рдХреЗ init (рдирд╛рдо: ManageObjectModel :) initializer рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ ред

All Articles