рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рдореИрдВрдиреЗ рдХреЛрд░ рдбреЗрдЯрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдмрдбрд╝реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкрд░ рдХрд╛рдо рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛ред рд╕рд╛рдорд╛рдиреНрдп рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдкрд░ рд▓реЛрдЧ рдмрджрд▓ рдЬрд╛рддреЗ рд╣реИрдВ, рдЕрдиреБрднрд╡ рдЦреЛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдХреЛ рднреБрд▓рд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдХрд┐рд╕реА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдврд╛рдВрдЪреЗ рдХреЗ рдЕрдзреНрдпрдпрди рдореЗрдВ рд╕рднреА рдХреЛ рдЧрд╣рд░рд╛ рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИ - рд╣рд░ рдХрд┐рд╕реА рдХреА рдЕрдкрдиреА рдХрд╛рд░реНрдп рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рдореИрдВрдиреЗ рдПрдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдкреНрд░рд╕реНрддреБрддрд┐ рддреИрдпрд╛рд░ рдХреА, рдЙрди рдмрд┐рдВрджреБрдУрдВ рд╕реЗ рдЬрд┐рдиреНрд╣реЗрдВ рдореИрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдпрд╛ рдЕрдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдорд╛рдирддрд╛ рд╣реВрдВред рдореИрдВ рд╕рднреА рдХреЗ рд╕рд╛рде рд╕рд╛рдЭрд╛ рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдЖрд╢рд╛ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдкреНрд░рднрд╛рд╡реА рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ рдФрд░ рдЧрд▓рддрд┐рдпрд╛рдВ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рдпрд╣ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕ рд╡рд┐рд╖рдп рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдЫреЛрдЯреЗ рд╕реЗ рд╣реИрдВред
рдореИрдВ рд╢реБрд░реБрдЖрдд рдХреЗ рд╕рд╛рде рдХрд░рддрд╛ рд╣реВрдБред
рдХреЛрд░ рдбреЗрдЯрд╛ рдПрдХ рдврд╛рдВрдЪрд╛ рд╣реИ рдЬреЛ рдХрд┐рд╕реА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдбреЗрдЯрд╛ рдХреЛ рдкреНрд░рдмрдВрдзрд┐рдд рдФрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИред рдЖрдк рдХреЛрд░ рдбреЗрдЯрд╛ рдХреЛ рднреМрддрд┐рдХ рд╕рдВрдмрдВрдзрдкрд░рдХ рднрдВрдбрд╛рд░рдг рдкрд░ рдПрдХ рдЖрд╡рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рди рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдбреЗрдЯрд╛ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рдХреЛрд░ рдбреЗрдЯрд╛ рд╕реНрд╡рдпрдВ рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдирд╣реАрдВ рд╣реИред
рдХреЛрд░ рдбреЗрдЯрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ

рд╕рдВрдЧреНрд░рд╣рдг рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЕрдиреБрдкреНрд░рдпреЛрдЧ
NSPersistentStoreCoordinator рдпрд╛
NSPersistentContainer рд╡рд░реНрдЧреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред NSPersistentStoreCoordinator рдореЙрдбрд▓ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдкреНрд░рдХрд╛рд░ рдХрд╛ рднрдВрдбрд╛рд░рдг рдмрдирд╛рддрд╛ рд╣реИ, рдЖрдк рд╕реНрдерд╛рди рдФрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд┐рдХрд▓реНрдк рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред NSPersistentContainer рдХрд╛ рдЙрдкрдпреЛрдЧ iOS10 рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдиреНрдпреВрдирддрдо рдорд╛рддреНрд░рд╛ рдореЗрдВ рдХреЛрдб рдмрдирд╛рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
рдпрд╣ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ: рдпрджрд┐ рдХреЛрдИ рдбреЗрдЯрд╛рдмреЗрд╕ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдкрде рдкрд░ рдореМрдЬреВрдж рд╣реИ, рддреЛ рд╕рдордиреНрд╡рдпрдХ рдЗрд╕рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреА рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рдПрдХ рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдбреЗрдЯрд╛рдмреЗрд╕ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИ, рддреЛ рдпрд╣ NSManagedObjectModel рдореЙрдбрд▓ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рд╕рдм рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореЙрдбрд▓ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдореЗрдиреВ рд╕рдВрдкрд╛рджрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ Xcode рдореЗрдВ рдПрдХ рдирдпрд╛ рд╕рдВрд╕реНрдХрд░рдг рдмрдирд╛рдПрдВ -> рдореЙрдбрд▓ рд╕рдВрд╕реНрдХрд░рдг рдЬреЛрдбрд╝реЗрдВред рдпрджрд┐ рдЖрдкрдХреЛ рд░рд╛рд╕реНрддрд╛ рдорд┐рд▓рддрд╛ рд╣реИ, рддреЛ рдЖрдк рдПрдореБрд▓реЗрдЯрд░ рдореЗрдВ рдЖрдзрд╛рд░ рдвреВрдВрдв рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЦреЛрд▓ рд╕рдХрддреЗ рд╣реИрдВред
NSPersistentStoreCoordinator рдХреЗ рд╕рд╛рде рдЙрджрд╛рд╣рд░рдгvar persistentCoordinator: NSPersistentStoreCoordinator = { let modelURL = Bundle.main.url(forResource: "Test", withExtension: "momd") let managedObjectModel = NSManagedObjectModel(contentsOf: modelURL!) let persistentCoordinator = NSPersistentStoreCoordinator(managedObjectModel: managedObjectModel!) let documentsPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] let storeURL = URL(fileURLWithPath: documentsPath.appending("/Test.sqlite")) print("storeUrl = \(storeURL)") do { try persistentCoordinator.addPersistentStore(ofType: NSSQLiteStoreType, configurationName: nil, at: storeURL, options: [NSSQLitePragmasOption: ["journal_mode":"MEMORY"]]) return persistentCoordinator } catch { abort() } } ()
NSPersistentContainer рдЙрджрд╛рд╣рд░рдг var persistentContainer: NSPersistentContainer = { let container = NSPersistentContainer(name: "CoreDataTest") container.loadPersistentStores(completionHandler: { (storeDescription, error) in print("storeDescription = \(storeDescription)") if let error = error as NSError? { fatalError("Unresolved error \(error), \(error.userInfo)") } }) return container } ()
рдХреЛрд░ рдбреЗрдЯрд╛ 4 рдкреНрд░рдХрд╛рд░ рдХреЗ рднрдВрдбрд╛рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ:
- SQLite
- рдмрд╛рдЗрдирд░реА
- рд╕реНрдореГрддрд┐ рдореЗрдВ
- рдПрдХреНрд╕рдПрдордПрд▓ (рдХреЗрд╡рд▓ рдореИрдХ рдУрдПрд╕)
рдпрджрд┐, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕реБрд░рдХреНрд╖рд╛ рдХрд╛рд░рдгреЛрдВ рд╕реЗ, рдЖрдк рдбреЗрдЯрд╛ рдХреЛ рдлрд╝рд╛рдЗрд▓ рд░реВрдк рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╕рд╛рде рд╣реА рд╕рд╛рде рд╕рддреНрд░ рдХреЗ рджреМрд░рд╛рди рдХреИрд╢рд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдФрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдбреЗрдЯрд╛, "рдЗрди-рдореЗрдореЛрд░реА" рдкреНрд░рдХрд╛рд░ рдХрд╛ рднрдВрдбрд╛рд░рдг рдХрд╛рдлреА рдЙрдкрдпреБрдХреНрдд рд╣реИред рджрд░рдЕрд╕рд▓, рдПрдХ рдПрдкреНрд▓реАрдХреЗрд╢рди рдореЗрдВ рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░рд╣ рдХреЗ рд╕реНрдЯреЛрд░реЗрдЬ рд░рдЦрдирд╛ рдордирд╛ рд╣реИред
рдореИрдВ
NSManagedObjectContext рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рд╢рдмреНрдж рдХрд╣рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, Apple NSManagedObjectContext рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрд╕реНрдкрд╖реНрдЯ рд╢рдмреНрдж рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ - рдХреЛрд░ рдбреЗрдЯрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд╛рддрд╛рд╡рд░рдгред рдпрд╣ рд╕рдм рд╕рдВрдмрдВрдзрдкрд░рдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝рд╛рд╡ рд╕реЗ рдЦреБрдж рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреА рдЗрдЪреНрдЫрд╛ рд╕реЗ, рдФрд░ рдХреЛрд░ рдбреЗрдЯрд╛ рдХреЛ рдПрдХ рдЖрд╕рд╛рди-рд╕реЗ-рдЙрдкрдпреЛрдЧ рдЙрдкрдХрд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдкреЗрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЪрд╛рдмрд┐рдпреЛрдВ, рд▓реЗрдирджреЗрди рдФрд░ рдЕрдиреНрдп рдмрд╛рдЬрд╝рджрд╛рди рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреА рд╕рдордЭ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди рд╕рдВрдмрдВрдзрдкрд░рдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреА рднрд╛рд╖рд╛ рдореЗрдВ, NSManagedObjectContext, рдПрдХ рдЕрд░реНрде рдореЗрдВ, рд▓реЗрдирджреЗрди рдкреНрд░рдмрдВрдзрдХ рдХрд╣рд▓рд╛ рд╕рдХрддрд╛ рд╣реИред рдЖрдкрдиреЗ рд╢рд╛рдпрдж рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдХрд┐ рдЗрд╕рдореЗрдВ рдмрдЪрдд рдФрд░ рд░реЛрд▓рдмреИрдХ рд╡рд┐рдзрд┐рдпрд╛рдВ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдЖрдк рдХреЗрд╡рд▓ рдкрд╣рд▓реЗ рдПрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
рдЗрд╕ рд╕рд░рд▓ рддрдереНрдп рдХреА рдЧрд▓рддрдлрд╣рдореА рдПрдХрд▓-рд╕рдВрджрд░реНрдн рдореЙрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдУрд░ рд▓реЗ рдЬрд╛рддреА рд╣реИ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЙрди рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рднреА рдЬрд╣рд╛рдВ рдпрд╣ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рдПрдХ рдмрдбрд╝реЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдФрд░ рдЙрд╕реА рд╕рдордп рдЖрдкрдХреЛ рдХреБрдЫ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЖрдк рдХрд┐рд╕ рдмрд┐рдВрджреБ рдкрд░ рдмрдЪрдд рдХреЛ рдХрд╣рддреЗ рд╣реИрдВ? рдпрджрд┐ рд╣рдо рдПрдХ рд░рд┐рд▓реЗрд╢рдирд▓ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣реЗ рдереЗ, рддреЛ рдХреЛрдИ рд╕рд╡рд╛рд▓ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдСрдкрд░реЗрд╢рди рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд▓реЗрдирджреЗрди рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдХреЛрд░ рдбреЗрдЯрд╛ рдореЗрдВ рднреА рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╣реБрдд рд╣реА рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рддрд░реАрдХрд╛ рд╣реИ - рдпрд╣ рдмрдЪреНрдЪреЗ рдХреЗ рд╕рдВрджрд░реНрдн рдХреА рдПрдХ рд╢рд╛рдЦрд╛ рд╣реИред рд▓реЗрдХрд┐рди рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╢рд╛рдпрдж рд╣реА рдХрднреА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣рд╛рдБ рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдПрдХ рдЕрдЪреНрдЫрд╛
рд▓реЗрдЦ рд╣реИ ред
рд╡рд┐рд░рд╛рд╕рдд
рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдореБрдЭреЗ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖ рд░рд╣рд╛ рд╣реИ, рдмрд╣реБрдд рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдореИрдиреБрдЕрд▓ рдФрд░ рдЙрджрд╛рд╣рд░рдг рд╣реИрдВ рдЬрд╣рд╛рдВ Entity / NSManagedObject (рддрд╛рд▓рд┐рдХрд╛рдУрдВ) рдХреЗ рд▓рд┐рдП рдЙрддреНрддрд░рд╛рдзрд┐рдХрд╛рд░ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рдмреАрдЪ, рдпрд╣ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЙрдкрдХрд░рдг рд╣реИред рдпрджрд┐ рдЖрдк рдЗрдирд╣реЗрд░рд┐рдЯреЗрдВрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдХреЗрд╡рд▓ KVC рддрдВрддреНрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ (рдлрд╝реАрд▓реНрдбреНрд╕) рдХреЛ рдорд╛рди рдЕрд╕рд╛рдЗрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдирд╛рдо рдФрд░ рдкреНрд░рдХрд╛рд░ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреА рдЬрд╛рдБрдЪ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдЖрд╕рд╛рдиреА рд╕реЗ рд░рдирдЯрд╛рдЗрдо рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдЬрдиреНрдо рджреЗ рд╕рдХрддрд╛ рд╣реИред
NSManagedObject рдХреЗ рд▓рд┐рдП рд╡рд░реНрдЧ рдкреБрдирд░реНрд╡рд┐рддреНрдд рдХреЛрд░ рдбреЗрдЯрд╛ рдбрд┐рдЬрд╛рдЗрдирд░ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

рд╡рдВрд╢рд╛рдиреБрдХреНрд░рдо рдФрд░ рдХреЛрдб рдкреАрдврд╝реА
рдЗрдХрд╛рдИ рдХрд╛ рдирд╛рдо рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдк рдХреЛрдб рдкреАрдврд╝реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рддреИрдпрд╛рд░ рдХреЛрдб рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд░реНрдЧ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:


рдпрджрд┐ рдЖрдк рдСрдЯреЛрдЬреЗрдирд░реЗрдЯреЗрдб рдХреЛрдб рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рджреВрд╕рд░реЗ рддрд░реАрдХреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: рдПрдВрдЯрд┐рдЯреА рдХреЗ рд▓рд┐рдП "рдХреЛрдбрдЧрди" рд╡рд┐рдХрд▓реНрдк рд╕реЗрдЯ рдХрд░реЗрдВред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдХреЛрдб рдХреЛ рдЦреЛрдЬрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП .. / DerivedData / ...

рдХрдХреНрд╖рд╛рдПрдВ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдкреАрдврд╝реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдЪрд░ рдирд╛рдореЛрдВ рдореЗрдВ рдЯрд╛рдЗрдкреЛ рд░рдирдЯрд╛рдЗрдо рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдЬрдиреНрдо рджреЗ рд╕рдХрддрд╛ рд╣реИред
рдпрд╣рд╛рдБ рдХреБрдЫ рдХреЛрдб рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
@objc public class Company: NSManagedObject { @NSManaged public var inn: String? @NSManaged public var name: String? @NSManaged public var uid: String? @NSManaged public var employee: NSSet? }
рд╕реНрд╡рд┐рдлреНрдЯ рдореЗрдВ, @NSManaged рдХрд╛ рд╡рд╣реА рдЕрд░реНрде рд╣реИ рдЬреЛ Objective C рдореЗрдВ
рдбрд╛рдпрдирд╛рдорд┐рдХ рд╣реИред
рдХреЛрд░ рдбреЗрдЯрд╛ рд╕реНрд╡рдпрдВ рдЕрдкрдиреА рдХрдХреНрд╖рд╛рдУрдВ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ (рдЖрдВрддрд░рд┐рдХ рдПрдХреНрд╕реЗрд╕рд░реНрд╕) рдХрд╛ рдзреНрдпрд╛рди рд░рдЦрддрд╛ рд╣реИред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдкрд╛рд░рдЧрдорди рдХреНрд╖реЗрддреНрд░ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдЙрдиреНрд╣реЗрдВ рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝рдВрдХреНрд╢рди рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
NSManagedObject (рддрд╛рд▓рд┐рдХрд╛рдУрдВ) рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реА рдХрдХреНрд╖рд╛рдПрдВ рдЕрдиреНрдп рд╡рд░реНрдЧреЛрдВ рдХреЗ рд╡рд┐рдкрд░реАрдд, IOS10 рд╕реЗ рдкрд╣рд▓реЗ "рдирд┐рдпрдорд┐рдд" рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдирд╣реАрдВ рдереАрдВред рдкреНрд░рдХрд╛рд░ рдХрдВрдкрдиреА рдХрд╛ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, NSEntityDescription рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдПрдХ рдЕрдзрд┐рдХ рдЕрдирд╛рдбрд╝реА рдирд┐рд░реНрдорд╛рдг рд▓рд┐рдЦрдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛ред рдЕрдм рд╕рдВрджрд░реНрдн рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЖрд░рдВрднреАрдХрд░рдг рдХреА рдПрдХ рдФрд░ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╡рд┐рдзрд┐ рд╣реИ (NSManagedObjectContext)ред рдХреЛрдб рдиреАрдЪреЗ рд╣реИред рдХреЗрд╡реАрд╕реА рддрдВрддреНрд░ рдкрд░ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╕рдордп рд╡рд┐рд░рд╛рд╕рдд рдХреЗ рд▓рд╛рдн рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ:
NSManagedObject рдХреЗ рд▓рд┐рдП рдирд╛рдо рд╕реНрдерд╛рди
рдПрдХ рдФрд░ рдмрд╛рдд рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдирд╛рдо рд╣реИред

рдпрджрд┐ рдЖрдк ObjectiveC рдпрд╛ Swift рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ рддреЛ рдЖрдкрдХреЛ рдХреЛрдИ рдХрдард┐рдирд╛рдИ рдирд╣реАрдВ рд╣реЛрдЧреАред рдЖрдорддреМрд░ рдкрд░, рдпрд╣ рдлрд╝реАрд▓реНрдб рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рднрд░реА рдЬрд╛рддреА рд╣реИред рд▓реЗрдХрд┐рди рдорд┐рд╢реНрд░рд┐рдд рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ, рдпрд╣ рдЖрдкрдХреЗ рд▓рд┐рдП рдПрдХ рдЖрд╢реНрдЪрд░реНрдп рдХреА рдмрд╛рдд рд╣реЛ рд╕рдХрддреА рд╣реИ рдХрд┐ рд╕реНрд╡рд┐рдлреНрдЯ рдФрд░ рдСрдмреНрдЬреЗрдХреНрдЯрд┐рд╡ рдореЗрдВ рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡рд┐рдХрд▓реНрдк рджреЗрдиреЗ рд╣реЛрдВрдЧреЗред рд╕реНрд╡рд┐рдлреНрдЯ рдореЗрдВ, "рдореЙрдбреНрдпреВрд▓" рднрд░рдирд╛ рд╣реЛрдЧрд╛ред рдпрджрд┐ рдпрд╣ рдлрд╝реАрд▓реНрдб рдкреВрд░реА рдирд╣реАрдВ рд╣реБрдИ рд╣реИ, рддреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдирд╛рдо рдХреЗ рд╕рд╛рде рдПрдХ рдЙрдкрд╕рд░реНрдЧ рдХреЛ рд╡рд░реНрдЧ рдирд╛рдо рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдПрдЧрд╛, рдЬрд┐рд╕рд╕реЗ рд░рдирдЯрд╛рдЗрдо рддреНрд░реБрдЯрд┐ рд╣реЛрдЧреАред рдСрдмреНрдЬреЗрдХреНрдЯрд┐рд╡ рд╕реА рдореЗрдВ, "рдореЙрдбреНрдпреВрд▓" рдХреЛ рдЦрд╛рд▓реА рдЫреЛрдбрд╝ рджреЗрдВ, рдЕрдиреНрдпрдерд╛ NSManagedObject рд╡рд░реНрдЧ рдХреЗ рдирд╛рдо рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЗрд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд░рддреЗ рд╕рдордп рдирд╣реАрдВ рдорд┐рд▓реЗрдЧрд╛ред
рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдмреАрдЪ рд╕рдВрдмрдВрдз
рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рд░рд┐рд╢реНрддреЛрдВ рдХрд╛ рд╡рд┐рд╖рдп рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╡рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕ рдмрд╛рдд рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреЗ рд▓рд┐рдП рдмрд╛рд▓ рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЛ рдХреИрд╕реЗ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдПред рдЗрд╕рд▓рд┐рдП, рдкрд╣рд▓реЗ, рд▓рд┐рдВрдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рддрдВрддреНрд░ рдХрд╛ рдПрдХ рддреНрд╡рд░рд┐рдд рдЕрдиреБрд╕реНрдорд╛рд░рдХред рдПрдХ рдкрд╛рд░рдВрдкрд░рд┐рдХ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ, рдПрдХ рдХрдВрдкрдиреА рдХрд░реНрдордЪрд╛рд░реА рд╣реИ, рдПрдХ-рд╕реЗ-рдХрдИ рд╕рдВрдмрдВрдз рд╣реИрдВ:
- рдкреНрд░рддреНрдпреЗрдХ рдкрдХреНрд╖ рдкрд░ рдПрдХ рдХрдиреЗрдХреНрд╢рди рдмрдирд╛рдПрдВ (рддрд╛рд▓рд┐рдХрд╛)
- рдЙрд╕рдХреЗ рдмрд╛рдж, рдЙрд▓рдЯрд╛ рдХреНрд╖реЗрддреНрд░ рдЙрдкрд▓рдмреНрдз рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рднрд░рдирд╛ рд╣реЛрдЧрд╛ред


Apple рдЙрд▓рдЯреЗ рд░рд┐рд╢реНрддреЛрдВ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдкрд░ рдЬреЛрд░ рджреЗрддрд╛ рд╣реИред рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ, рдЙрд▓рдЯрд╛ рд╕реБрд╕рдВрдЧрддрддрд╛ рдХреЛ рдордЬрдмреВрдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХрдиреЗрдХреНрд╢рди рдХреЗ рджреЛрдиреЛрдВ рдХрд┐рдирд╛рд░реЛрдВ рдкрд░ рдХреЛрд░ рдбреЗрдЯрд╛ рдЯреНрд░реИрдХ рдкрд░рд┐рд╡рд░реНрддрди рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рдХреИрд╢рд┐рдВрдЧ рдФрд░ рдЕрджреНрдпрддрди рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред
рд╡рд┐рд▓реЛрдкрди рдирд┐рдпрдо рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рднреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рд╡рд┐рд▓реЛрдкрди рдирд┐рдпрдо рдПрдХ рдХреНрд░рд┐рдпрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдЬрдм рдореВрд▓ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
- рдХреИрд╕реНрдХреЗрдб - рд╕рднреА рдмрд╛рд▓ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд╣рдЯрд╛рдиреЗ, рдЬрдм рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
- рдЗрдирдХрд╛рд░ - рдпрджрд┐ рдмрдЪреНрдЪрд╛ рд╣реИ рддреЛ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХрд╛ рдирд┐рд╖реЗрдз
- Nullify - рдореВрд▓ рд╕рдВрджрд░реНрдн рдХреЛ nullify рдХрд░реЗрдВ
- рдХреЛрдИ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдирд╣реАрдВ - рдХреЛрдИ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рд╣реИ, рдпрд╣ рд╕рдВрдХрд▓рди рдкрд░ рдПрдХ рдЪреЗрддрд╛рд╡рдиреА рджреЗрдЧрд╛
рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдЬрдм рдХреЛрдИ рдХрдВрдкрдиреА рд╣рдЯрд╛ рджреА рдЬрд╛рддреА рд╣реИ, рддреЛ рд╕рднреА рдХрд░реНрдордЪрд╛рд░рд┐рдпреЛрдВ рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ (рдХреИрд╕реНрдХреЗрдб)ред рдЬрдм рдЖрдк рдХрд┐рд╕реА рдХрд░реНрдордЪрд╛рд░реА рдХреЛ рд╣рдЯрд╛рддреЗ рд╣реИрдВ, рддреЛ рдХрдВрдкрдиреА рдореЗрдВ рдЙрд╕рдХрд╛ рд▓рд┐рдВрдХ рд░реАрд╕реЗрдЯ рд╣реЛ рдЬрд╛рдПрдЧрд╛ (рдкреНрд░реА рд╕реНрдХреНрд░реАрди)
рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреЗ рд▓рд┐рдП рдмрд╛рд▓ рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рддрд░реАрдХреЗ
1) рдкрд╣рд▓рд╛ рддрд░реАрдХрд╛ рдПрдирдПрд╕рдПрд╕рдИрдЯреА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬреЛрдбрд╝ рд░рд╣рд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрдВрдкрдиреА рдореЗрдВ 2 рдХрд░реНрдордЪрд╛рд░реА рдЬреЛрдбрд╝реЗрдВ:
let set = NSMutableSet(); if let employee1 = NSEntityDescription.insertNewObject(forEntityName: "Employee", into: moc) as? Employee { employee1.firstName = "" employee1.secondName = "" set.add(employee1) } if let emploee2 = NSEntityDescription.insertNewObject(forEntityName: "Employee", into: moc) as? Employee { employee2.firstName = "" employee2.secondName = "" set.add(employee2) } company.employee = set
рдпрд╣ рд╡рд┐рдзрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдпрд╛ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рднрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред рдереЛрдбрд╝реА рдмрд╛рд░реАрдХрд┐рдпрд╛рдВ рд╣реИред рдпрджрд┐ рдХрдВрдкрдиреА рдХреЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд░реНрдордЪрд╛рд░реА рдереЗ, рдФрд░ рдЖрдкрдиреЗ рдПрдХ рдирдпрд╛ рд╕реЗрдЯ рд╕реМрдВрдкрд╛, рддреЛ рдкреВрд░реНрд╡ рдХрд░реНрдордЪрд╛рд░реА рдХрдВрдкрдиреА рдХреЗ рд▓рд┐рдВрдХ рдХреЛ рд░реАрд╕реЗрдЯ рдХрд░ рджреЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рд╡реЗ рд╣рдЯрд╛рдП рдирд╣реАрдВ рдЬрд╛рдПрдВрдЧреЗред рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ, рдЖрдк рдХрд░реНрдордЪрд╛рд░рд┐рдпреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕ рд╕реЗрдЯ рдХреЗ рд╕рд╛рде рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
let set = company.mutableSetValue(forKey: "employee")
2) рдорд╛рддрд╛-рдкрд┐рддрд╛ рдЖрдИрдбреА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмрдЪреНрдЪреЗ рдХреА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдЬреЛрдбрд╝рдирд╛
if let employee = NSEntityDescription.insertNewObject(forEntityName: "Employee", into: moc) as? Employee { employee.firstName = "" employee.secondName = "" employee.company = company }
рдмрдЪреНрдЪреЗ рдХреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдпрд╛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╕рдордп рджреВрд╕рд░реА рд╡рд┐рдзрд┐ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ
рдЕрд▓рдЧ рд░реВрдкред
3) рдСрдЯреЛ-рдЬрдирд░реЗрдЯ рдХрд┐рдП рдЧрдП рддрд░реАрдХреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмрдЪреНрдЪреЗ рдХреА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдЬреЛрдбрд╝рдирд╛
extension Company { @objc(addEmployeeObject:) @NSManaged public func addEmployee(_ value: Employee) @objc(removeEmployeeObject:) @NSManaged public func removeFromEmployee(_ value: Employee) @objc(addEmployee:) @NSManaged public func addEmployee(_ values: NSSet) @objc(removeEmployee:) @NSManaged public func removeFromEmployee(_ values: NSSet) }
рд╕рдВрдкреВрд░реНрдгрддрд╛ рдХреЗ рд▓рд┐рдП, рдЗрд╕ рдкрджреНрдзрддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдирд╛ рдЙрдкрдпреЛрдЧреА рд╣реИ, рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рддрд░рд╣ рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рдирд╣реАрдВ рдерд╛, рдФрд░ рдореИрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЛрдб рдХреЛ рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реВрдВ рддрд╛рдХрд┐ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдЕрд╡реНрдпрд╡рд╕реНрдерд┐рдд рди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред
рдмрд╛рд▓ рдЦрдВрдб рдкреНрд░рд╢реНрди
рдХреЛрд░ рдбреЗрдЯрд╛ рдореЗрдВ, рдЖрдк рдХрд┐рд╕реА рднреА рдбреЗрдЯрд╛ рдХреЗ рдмреАрдЪ рдордирдорд╛рдиреА рдХреНрд╡реЗрд░реА рдирд╣реАрдВ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо SQL рдореЗрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдирд┐рд░реНрднрд░ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдмреАрдЪ, рдорд╛рдирдХ рд╡рд┐рдзреЗрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЯреНрд░реИрдХ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред рдиреАрдЪреЗ рдПрдХ рдХреНрд╡реЗрд░реА рдХрд╛ рдЙрджрд╛рд╣рд░рдг рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдЙрди рд╕рднреА рдХрдВрдкрдирд┐рдпреЛрдВ рдХрд╛ рдЪрдпрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╛рдо рд╡рд╛рд▓рд╛ рдХрд░реНрдордЪрд╛рд░реА рд╣реИ:
public static func getCompanyWithEmployee(name: String) -> [Company] { let request = NSFetchRequest<NSFetchRequestResult>(entityName: self.className()) request.predicate = NSPredicate(format: "ANY employee.firstName = %@", name) do { if let result = try moc.fetch(request) as? [Company] { return result } } catch { } return [Company]() }
рдХреЛрдб рдореЗрдВ рд╡рд┐рдзрд┐ рдХреЙрд▓ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдЧреА:
рдХреНрд╡реЗрд░реА рдореЗрдВ рдЯреНрд░рд╛рдВрдЬрд╝рд┐рдЯ рдлрд╝реАрд▓реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░реЗрдВ, рдХреНрд╡реЗрд░реА рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрдиреЗ рдХреЗ рд╕рдордп рдЙрдирдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рд╣реЛрдЧреА, рд▓реЗрдХрд┐рди рдкрд░рд┐рдгрд╛рдо рдЧрд▓рдд рд╣реЛрдЧрд╛ред
рд╕реЗрдЯрд┐рдВрдЧ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ (рдлрд╝реАрд▓реНрдб)
рдЖрдкрдиреЗ рд╢рд╛рдпрдж рджреЗрдЦрд╛ рд╣реИ рдХрд┐ рдПрдВрдЯрд┐рдЯреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдХрдИ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВред
рд╡реИрдХрд▓реНрдкрд┐рдХ рдХреЗ рд╕рд╛рде, рдирд╛рдо рд╕реЗ рд╕рдм рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рд╣реИред
рд╕реНрдХреЗрд▓рд░ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рд╕реНрд╡рд┐рдлрд╝ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛ред рдЙрджреНрджреЗрд╢реНрдп-рд╕реА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕реНрдХреЗрд▓рд░ рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рд╢реВрдиреНрдп рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред KVC рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рд╕реНрдХреЗрд▓рд░ рдорд╛рди рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдПрдХ рд░рдирдЯрд╛рдЗрдо рддреНрд░реБрдЯрд┐ рдХрд╛ рдХрд╛рд░рдг рд╣реЛрдЧрд╛ред рдЗрд╕рд╕реЗ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдХреЛрд░ рдбреЗрдЯрд╛ рдореЗрдВ рд╡рд┐рд╢реЗрд╖рддрд╛ рдкреНрд░рдХрд╛рд░ рднрд╛рд╖рд╛ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдЦреНрдд рдкрддреНрд░рд╛рдЪрд╛рд░ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рд╕реНрд╡рд┐рдлреНрдЯ рдореЗрдВ, рдФрд░ рдорд┐рд╢реНрд░рд┐рдд рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ, рд╕реНрдХреЗрд▓рд░ рдкреНрд░рдХрд╛рд░ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЯреНрд░рд╛рдВрдЬрд╝рд┐рдЯ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдкрд░рд┐рдХрд▓рд┐рдд рдлрд╝реАрд▓реНрдб рд╣реИрдВ рдЬреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд
рдирд╣реАрдВ рд╣реИрдВред рдЗрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрди рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдПрдХ рдУрд╡рд░рд░рд╛рдЗрдб рдПрдХреНрд╕реЗрд╕рд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдпрд╛ рдЖрд╡рд╢реНрдпрдХрддрд╛рдиреБрд╕рд╛рд░ рдкреНрд░рд╛рдЗрдореЗрдЯрд┐рд╡ рдЕрд╕рд╛рдЗрди рдХрд░рдиреЗ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдорд╛рди рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдУрд╡рд░рд░рд╛рдЗрдб рд╡рд┐рд▓реНрд╕рд╡реЗрдЯ рдФрд░ рд╡реЗрдХрдлреНрд░реЙрдордлреЗрдХ)ред
рд╕рд╣рд╛рдпрдХ рдЕрднрд┐рдЧрдордХрд░реНрддрд╛:
рдпрджрд┐ рдЖрдкрдХреЛ рдЧрдгрдирд╛ рдХрд┐рдП рдЧрдП рдлрд╝реАрд▓реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдпрд╛ рдХреБрдЫ рдФрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рддреЛ рдЖрдкрдХреЛ рдпрд╣ рдирд╣реАрдВ рд╕реЛрдЪрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреНрдпрд╛ рд╣реИрдВред рдЗрд╕ рдмреАрдЪ, рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдорд╛рди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдФрд░ рдЕрд╕рд╛рдЗрди рдХрд░рдиреЗ рдХреЗ рд╕рдВрдЪрд╛рд▓рди "рдкрд░рдорд╛рдгреБ" рдирд╣реАрдВ рд╣реИрдВред рдореЗрд░реЗ рдХрд╣рдиреЗ рдХрд╛ рдорддрд▓рдм рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП, рдиреАрдЪреЗ рджрд┐рдпрд╛ рдЧрдпрд╛ рдХреЛрдб рджреЗрдЦреЗрдВ:
рд▓реВрдкрд┐рдВрдЧ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдХреЗ рдмрдЬрд╛рдп NSManagedObject рдИрд╡реЗрдВрдЯ рдореЗрдВ рдкреНрд░рд╛рдЗрдорд┐рдЯрд┐рд╡ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдПрдХ рдЙрджрд╛рд╣рд░рдг:
override func willSave() { let nameP = encrypt(field: primitiveValue(forKey: "name"), password: password) setPrimitiveValue(nameP, forKey: "nameC") super.willSave() } override func awakeFromFetch() { let nameP = decrypt(field: primitiveValue(forKey: "nameC"), password: password) setPrimitiveValue(nameP, forKey: "name") super.awakeFromFetch() }
рдпрджрд┐ рдЕрдЪрд╛рдирдХ рдХрд┐рд╕реА рд╕рдордп рдЖрдкрдХреЛ рдХрд┐рд╕реА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ awakeFromFetch рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкреЗрдВрдЪ рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдЖрд╢реНрдЪрд░реНрдп рд╣реЛрдЧрд╛ рдХрд┐ рдпрд╣ рдмрд╣реБрдд рдЕрдЬреАрдм рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдиреБрд░реЛрдз рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╕рдордп рдЗрд╕реЗ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдирд╣реАрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдХреЛрд░ рдбреЗрдЯрд╛ рдореЗрдВ рдмрд╣реБрдд рдмреБрджреНрдзрд┐рдорд╛рди рдХреИрд╢рд┐рдВрдЧ рддрдВрддреНрд░ рд╣реИ, рдФрд░ рдпрджрд┐ рдЪрдпрди рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдореЗрдореЛрд░реА рдореЗрдВ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдиреЗ рдЗрд╕ рддрд╛рд▓рд┐рдХрд╛ рдХреЛ рднрд░ рджрд┐рдпрд╛ рд╣реИ), рддреЛ рд╡рд┐рдзрд┐ рдирд╣реАрдВ рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдореЗрд░реЗ рдкреНрд░рдпреЛрдЧреЛрдВ рд╕реЗ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдкрд░рд┐рдХрд▓рд┐рдд рдореВрд▓реНрдпреЛрдВ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ, рдЖрдк рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ awakeFromFetch рдХреЗ рдЙрдкрдпреЛрдЧ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреИрд╕рд╛ рдХрд┐ Apple рдХреЗ рджрд╕реНрддрд╛рд╡реЗрдЬ рдХрд╣рддреЗ рд╣реИрдВред рдпрджрд┐ рдкрд░реАрдХреНрд╖рдг рдФрд░ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ awakeFromFetch рдХреЛ рдмрд╛рдзреНрдп рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЕрдиреБрд░реЛрдз рд╕реЗ рдкрд╣рд▓реЗ ManageObjectContext.refreshAllObjects () рдЬреЛрдбрд╝реЗрдВред
рд╡рд╣ рд╕рдм рд╣реИред
рдЕрдВрдд рддрдХ рдкрдврд╝рдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рдХреЛ рдзрдиреНрдпрд╡рд╛рджред