рд╕реНрд╡рд┐рдлреНрдЯ + рдХреЛрд░рдбреЗрдЯрд╛ + рдПрдХ рдЫреЛрдЯреА рдлрд╝рд╛рдЗрд▓

рдЫрд╡рд┐



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



рд╕рдордп рдХреА рдХреМрди рдкрд░рд╡рд╛рд╣ рдХрд░рддрд╛ рд╣реИ



рдЖрдк https://github.com/KoNEW/CoreDataTest.git рд▓реЗрдЦ рдХреЛ рдкрдврд╝реЗ рдмрд┐рдирд╛ рдпрд╣рд╛рдВ рд╕реЗ рддреБрд░рдВрдд рдПрдХ рдЙрджрд╛рд╣рд░рдг рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕реНрд╡рдпрдВ рд╕рдм рдХреБрдЫ рдзреВрдореНрд░рдкрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред



рд╕рд┐рдВрдереЗрдЯрд┐рдХ рдЙрджрд╛рд╣рд░рдг



рд╣рдо рдХреНрдпрд╛ рд▓реЗрдВрдЧреЗ


рдЗрд╕рдХреЗ рдмрд╛рдж, рд╕рднреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдФрд░ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рд╕рд┐рдВрдереЗрдЯрд┐рдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ - рд╣рдо рдХреНрд▓рд╛рд╕рд┐рдХ рд╕рдВрд╕реНрдерд╛рдУрдВ "рд╡рд┐рднрд╛рдЧ" рдФрд░ "рдХрд░реНрдордЪрд╛рд░реА" рдХреЛ рджреЗрдЦрдиреЗ рдФрд░ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрд╡реЗрджрди рдХрд░реЗрдВрдЧреЗред



рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдо рдЗрд╕ рддрд░рд╣ рдХреЗ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рд╕рд╛рде рд╡рд┐рднрд╛рдЧ рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░реЗрдВрдЧреЗ:







рдФрд░ рдХрд░реНрдордЪрд╛рд░реА, рдХреНрд░рдорд╢рдГ:







рдбреЗрдЯрд╛ рдореИрдиреЗрдЬрд░


рджрд░рдЕрд╕рд▓, рдкрд╣рд▓рд╛ рдХрджрдо Xcode рдЦреЛрд▓ рд░рд╣рд╛ рд╣реИ рдФрд░ CoreData рдФрд░ Swift рднрд╛рд╖рд╛ рд╕реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рддреБрдЪреНрдЫ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣рд╛ рд╣реИред рдЗрд╕ рд╕реНрддрд░ рдкрд░ рд╣рдо рдЬреЛ рдПрдХрдорд╛рддреНрд░ рд╕рдВрдкрд╛рджрди рдХрд░реЗрдВрдЧреЗ, рд╡рд╣ рд╣реИ рдХрд┐ рдЖрд╡реЗрджрди рдкреНрд░рддрд┐рдирд┐рдзрд┐ рд╕реЗ рдХреЛрд░рдбрд╛рдЯрд╛ рдХреЗ рд╕рд╛рде рд╕рднреА рдХрд╛рдореЛрдВ рдХреЛ рдХрд╛рдЯрдХрд░ рдПрдХ рдЕрд▓рдЧ рд╡рд░реНрдЧ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдП, рдЬреЛ рдПрдХ рдЧрд╛рдпрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд╣рдорд╛рд░реЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред рдореБрдЭреЗ рдмрд╕ рдЗрд╕реЗ рдХрд░рдиреЗ рдХреА рдЖрджрдд рдереА рдЬрдм рдореИрдВ рдХреЛрдб рдХрд░рддрд╛ рдерд╛ рдФрд░ рдпрд╣рд╛рдВ рдореИрдВ рджреЛрд╣рд░рд╛рддрд╛ рд╣реВрдВ - рдЙрд╕реА рд╕рдордп рдЖрдк рд╕реНрд╡рд┐рдлреНрдЯ рдкрд░ рдПрдХ рд╕рд┐рдВрдЧрд▓рдЯрди рдмрдирд╛рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдорд╛рд░реЗ рд╕рднреА рд╡рд░реНрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрд╕рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЗрд╕рдХреЗ рдмрд╛рдж CS (CoreData + Swift) рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред



рдЬрд╛рдореНрдм рд╕рдВрдЦреНрдпрд╛ рез
рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдпрд╣ Xcode 6 рдмреАрдЯрд╛ рдореЗрдВ рдПрдХ рдмрдЧ рд╣реИ рдпрд╛ рдПрдХ рдлреАрдЪрд░, рд▓реЗрдХрд┐рди рдЖрдкрдХреА рдЕрдкрдиреА рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрд╕рд░реНрдЧ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рд░ рдмрд╛рд░ рдЙрдиреНрд╣реЗрдВ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ, рдЕрдм рдЖрдкрдХреЛ рдЙрдиреНрд╣реЗрдВ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдлрд╝рд╛рдЗрд▓ рдЗрдВрд╕реНрдкреЗрдХреНрдЯрд░ рдЯреИрдм рдореЗрдВ рдРрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред




рддреЛ рд╣рдо рдХреНрдпрд╛ рдХрд░реЗрдВ:





рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, AppDelegate.swift рдлрд╝рд╛рдЗрд▓ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:



import UIKit import CoreData @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: NSDictionary?) -> Bool { // Override point for customization after application launch. return true } }
      
      





рдФрд░ CSDataManager.swft рдлрд╝рд╛рдЗрд▓ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:

 import UIKit import Foundation import CoreData let kCSErrorDomain = "ru.novilab-mobile.cstest" let kCSErrorLocalStorageCode = -1000 @objc(CSDataManager) class CSDataManager:NSObject { //Managed Model var _managedModel: NSManagedObjectModel? var managedModel: NSManagedObjectModel{ if !_managedModel{ _managedModel = NSManagedObjectModel.mergedModelFromBundles(nil) } return _managedModel! } //Store coordinator var _storeCoordinator: NSPersistentStoreCoordinator? var storeCoordinator: NSPersistentStoreCoordinator{ if !_storeCoordinator{ let _storeURL = self.applicationDocumentsDirectory.URLByAppendingPathComponent("CSDataStorage.sqlite") _storeCoordinator = NSPersistentStoreCoordinator(managedObjectModel: self.managedModel) func addStore() -> NSError?{ var result: NSError? = nil if _storeCoordinator!.addPersistentStoreWithType(NSSQLiteStoreType, configuration: nil, URL: _storeURL, options: nil, error: &result) == nil{ println("Create persistent store error occurred: \(result?.userInfo)") } return result } var error = addStore() if error != nil{ println("Store scheme error. Will remove store and try again. TODO: add scheme migration.") NSFileManager.defaultManager().removeItemAtURL(_storeURL, error: nil) error = addStore() if error{ println("Unresolved critical error with persistent store: \(error?.userInfo)") abort() } } } return _storeCoordinator! } //Managed Context var _managedContext: NSManagedObjectContext? = nil var managedContext: NSManagedObjectContext { if !_managedContext { let coordinator = self.storeCoordinator if coordinator != nil { _managedContext = NSManagedObjectContext() _managedContext!.persistentStoreCoordinator = coordinator } } return _managedContext! } //Init init() { super.init() NSNotificationCenter.defaultCenter().addObserver(self, selector: "appDidEnterBackground", name: UIApplicationDidEnterBackgroundNotification, object: nil) } @objc(appDidEnterBackground) func appDidEnterBackground(){ var (result:Bool, error:NSError?) = self.saveContext() if error != nil{ println("Application did not save data with reason: \(error?.userInfo)") } } // Returns the URL to the application's Documents directory. var applicationDocumentsDirectory: NSURL { let urls = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask) return urls[urls.endIndex-1] as NSURL } //Save context func saveContext() -> (Bool, NSError?){ println("Will save") var error: NSError? = nil var result: Bool = false let context = self.managedContext if context != nil{ if context.hasChanges && !context.save(&error){ println("Save context error occurred: \(error?.userInfo)") }else{ result = true } }else{ let errorCode = kCSErrorLocalStorageCode let userInfo = [NSLocalizedDescriptionKey : "Managed context is nil"] error = NSError.errorWithDomain(kCSErrorDomain, code: errorCode, userInfo: userInfo) } return (result, error) } //Singleton Instance class func sharedInstance() -> CSDataManager{ struct wrapper{ static var shared_instance: CSDataManager? = nil static var token: dispatch_once_t = 0 } dispatch_once(&wrapper.token, {wrapper.shared_instance = CSDataManager()}) return wrapper.shared_instance! } }
      
      







рдЖрдзрд╛рд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдХреЛрдб рджреНрд╡рд╛рд░рд╛ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдЬреЛ Xcode рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ - рдЕрд░реНрдерд╛рдд, рдЗрд╕реЗ рдХреБрдЫ рд╣рдж рддрдХ рдПрдХ рд╕рдВрджрд░реНрдн рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рднрд╛рд╖рд╛ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ, рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдореИрдВ рдЦреБрдж рдХреЗ рд▓рд┐рдП рдмрд╛рд╣рд░ рдХрд░реВрдВрдЧрд╛:







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

  • рдРрд╕реА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдЧреБрдгреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛
  • рд╕рд┐рд░реНрдл рдЖрдВрддрд░рд┐рдХ рдЪрд░ рдмрдирд╛рдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрдерддрд╛
  • рдЖрдВрддрд░рд┐рдХ рдЧреБрдг рдмрдирд╛рдиреЗ рдХреА рдЕрд╕рдВрднрд╡рддрд╛ - рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рд╣рдордиреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЕрдВрджрд░ рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛, рди рдХрд┐ рдЦрд░реАрдж рдлрд╝рд╛рдЗрд▓




рдЫрд╡рд┐








рдЬрд╛рдореНрдм рд╕рдВрдЦреНрдпрд╛ 3
рд╕рд┐рдВрдЧрд▓рдЯрди рдкреИрдЯрд░реНрди рдХреЛ рдЖрдВрддрд░рд┐рдХ рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдХрдард┐рди рдмреИрд╕рд╛рдЦреА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдЗрд╕реЗ рдХрдХреНрд╖рд╛ рдЪрд░ (рдХреНрд▓рд╛рд╕ рд╕рдВрд╕реНрдХрд░рдг) рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рд░рд▓ рддрд░реАрдХреЗ рд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬрд┐рд╕реЗ рднрд╛рд╖рд╛ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ - рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдВрдХрд▓рдХ рдЕрднреА рддрдХ рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИред рджреБрдЦ, рдЙрджрд╛рд╕реА - рд╣рдо рд╕реБрдзрд╛рд░реЛрдВ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рднрд╛рд╖рд╛ рдХреЗ рд╡рд░реНрддрдорд╛рди рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ, рдкрд╣рд▓реЗ (рдСрдмреНрдЬреЗрдХреНрдЯрд┐рд╡-рд╕реА рдХреЗ рд╕рд╛рде рддреБрд▓рдирд╛ рдореЗрдВ), рдПрдХ рдирд┐рдЬреА рд╡рд┐рдзрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдХреНрд▓рд╛рд╕ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝рд░ рдХреЛ рдирд╛рдорд┐рдд рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рд╢реБрджреНрдз рдмреЗрд╡рдХреВрдл-рдкреНрд░рддрд┐рд░реЛрдзреА рд╕рд┐рдВрдЧрд▓рдЯрди рдмрдирд╛рдирд╛ рдЕрднреА рднреА рдЕрд╕рдВрднрд╡ рд╣реИред




рдЬрд╛рдВрдм рдирдВрдмрд░ 4 рдпрд╛ рдлреАрдЪрд░, рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛
рдпрд╣ рднреА рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ NSNotificationCenter рдХреЛ рдХреЙрд▓ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдмрд╛рдд рд╣реИред Apple рд▓рд┐рдЦрддрд╛ рд╣реИ рдХрд┐ рд╕рднреА рд╕рд┐рд╕реНрдЯрдо рд▓рд╛рдЗрдмреНрд░реЗрд░реА (UIKit, Foundation, CoreData, рдЗрддреНрдпрд╛рджрд┐) рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕реНрд╡рд┐рдлреНрдЯ рдХреЗ рд╕рд╛рде рдкреВрд░реА рддрд░рд╣ рд╕реЗ рджреЛрд╕реНрдд рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рдХрд╛рдлреА рд╕рдЪ рд╣реИ, рдпрд╛ рдирд╣реАрдВ, рд▓реЗрдХрд┐рди рдХрд╛рдлреА рдирд╣реАрдВ рд╣реИред рдЕрд░реНрдерд╛рддреН, рд╣реБрдб рдХреЗ рддрд╣рдд, NSNotificationCenter рд╢реБрджреНрдз рдЙрджреНрджреЗрд╢реНрдп-рд╕реА рдкрд░ рдЪрд▓рддрд╛ рд╣реИ, рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рдХреЛрдб рдореЗрдВ рд╕рдм рдХреБрдЫ рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рд╣реЛред рдЗрд╕ рдХрд╛рд░рдг рд╕реЗ, рдЗрд╕рдХреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдореЗрдВ рдХрдИ рдмрд╛рд░реАрдХрд┐рдпрд╛рдБ рдФрд░ рд╕реАрдорд╛рдПрдБ рд╣реИрдВ:



рдПрдХ рдкрд▓


рд╣рдорд╛рд░реЗ рдХреЛрдб рдХреЛ рдЙрджреНрджреЗрд╢реНрдп-рд╕реА рдХреЙрд▓ рдХреЗ рд╕рд╛рде рдареАрдХ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЗрд╕реЗ рд╕рдВрдЧрдд рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ - рдпрд╣рд╛рдВ, рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд╕рдм рдХреБрдЫ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╣реИред рд╡рд░реНрдЧ рдирд╛рдо рдФрд░ рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдЖрд╡рд╢реНрдпрдХ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП @objc()



рдЬрд╛рджреВ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рдЬреЛрдбрд╝реЗрдВ - рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ:



 @objc(CSDataManager) class CSDataManager:NSObject { ... @objc(appDidEnterBackground) func appDidEnterBackground(){ ...
      
      







рдХреНрд╖рдг рджреЛ


рдХреЙрд▓ рд╕реЗрдВрдЯрд░ рдХреЗ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди рд╕реЗрдВрдЯрд░ рд╕реЗ рд╕реЗрд╡-рдХреЙрдиреНрдЯреЗрдХреНрд╕реНрдЯ рдореЗрдердб рд╕реЗ рд╣реА рдЯрд╛рдИ рдХрд░рдирд╛ рддрд░реНрдХрд╕рдВрдЧрдд рд╣реЛрдЧрд╛ - рд▓реЗрдХрд┐рди рдЪреВрдБрдХрд┐ рдпрд╣ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЯреНрдпреВрдкрд▓ рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ, рдЗрд╕ рддрд░рд╣ рдХреЗ рдХрдВрд╕реНрдЯреНрд░рдХреНрд╢рди рдСрдмреНрдЬреЗрдХреНрдЯрд┐рд╡-рд╕реА рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рд╣реИрдВред рдЗрд╕ рд╡рдЬрд╣ рд╕реЗ, рд╣рдо рдПрдХ рд╕рд░рд▓ void



рд╡рд┐рдзрд┐ рдХреЙрд▓ рдХреЗ рд╕рд╛рде рдПрдХ рдмреИрд╕рд╛рдЦреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рд╕рдм рдХреБрдЫ рдЬрд╝реЗрди рд╣реИ, рдирд╣реАрдВ, рдирд╣реАрдВред рд▓реЗрдХрд┐рди рдЖрдкрдХреЗ рд╕рд┐рд░ рдореЗрдВ рдРрд╕реА рдЪреАрдЬреЗрдВ рдЬрдм рдЖрдкрдХреЗ рдЙрддреНрдкрд╛рдж рдХреЛ рдбрд┐рдЬрд╛рдЗрди рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдиреЗ рдпреЛрдЧреНрдп рд╣реИред





рдПрдХ рдбреЗрдЯрд╛ рдореЙрдбрд▓ рдмрдирд╛рдПрдВ


рдпрд╣рд╛рдВ, рд╕рдм рдХреБрдЫ рддреБрдЪреНрдЫ рд░реВрдк рд╕реЗ рдорд╛рдирдХ рд╣реИ Xcode рдЙрдкрдХрд░рдг рд╣рдорд╛рд░реЗ рдбреЗрдЯрд╛ рдореЙрдбрд▓ рдХреЛ рдмрдирд╛рддреЗ рд╣реИрдВ - рдЕрдВрдд рдореЗрдВ рд╣рдореЗрдВ рдРрд╕рд╛ рдХреБрдЫ рдорд┐рд▓рддрд╛ рд╣реИред



рдЫрд╡рд┐



рджрд░рдЕрд╕рд▓ рд╕рдорд╕реНрдпрд╛ рд╣реИ



рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рдХреНрдпрд╛ рд╣реИред рдпрд╣ рд╕рд░рд▓ рд╣реИ - NSManagedObject рд╕реЗ рд╡рдВрд╢рд╛рдиреБрдХреНрд░рдо рд╡рд░реНрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдкреАрдврд╝реА Xcode 6-Beta рдореЗрдВ рдЯреВрдЯ рдЧрдпрд╛ рд╣реИред рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ, рдХреЛрдб рдСрдмреНрдЬреЗрдХреНрдЯрд┐рд╡-рд╕реА рдкрд░ рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рд╕реНрд╡рд┐рдлреНрдЯ рдкрд░ рдирд╣реАрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдЖрдИрдПрд▓рдИрдЯреА рдирд╣реАрдВ рд╣реИред

рддреЛ, рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдпрд╣рд╛рдБ рдлрд┐рд░ рд╕реЗ рдХреНрдпрд╛ рд╕рдорд╛рдзрд╛рди рд╣реИрдВ:







рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдВ



рдЖрдЗрдП рдкрд╣рд▓реЗ "рд╡рд┐рднрд╛рдЧ" рдХреЗ рдХреЗрд╡рд▓ рдПрдХ рд╕рд╛рд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ, рд╣рдо рдереЛрдбрд╝реА рджреЗрд░ рдмрд╛рдж рд╕рдВрдмрдВрдзреЛрдВ рдореЗрдВ рд▓реМрдЯ рдЖрдПрдВрдЧреЗред рдЗрд╕рд▓рд┐рдП, рдкрддреНрд░ рджреНрд╡рд╛рд░рд╛ Apple рдХреЗ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░рддреЗ рд╣реБрдП, рд╣рдо CSDepbox рд╡рд░реНрдЧ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдлрд╛рдЗрд▓ рдкрд░ рдЖрддреЗ рд╣реИрдВ:



 import Foundation import CoreData import UIKit class CSDepartment : NSManagedObject{ @NSManaged var title: NSString @NSManaged var internalID: NSNumber @NSManaged var phone: NSString? }
      
      







рдФрд░ рд╣рдо рд╕рд░рд▓рддрд╛ рдХреЗ рд▓рд┐рдП AppDelegate рдореЗрдВ рдЫреЛрдбрд╝реЗ рдЧрдП рдХреЛрдб рдХреЗ рд╕рд╛рде рд╕рднреА рдХрд╛рдо рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВрдЧреЗ (рдмрд╛рдж рдореЗрдВ, рдпрд╣ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рд╕рд╣реА рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдмрджрд▓ рджреЗрдЧрд╛)ред



 func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: NSDictionary?) -> Bool { //Get manager let manager = CSDataManager.sharedInstance() //Create new department let newDepartment : AnyObject! = NSEntityDescription.insertNewObjectForEntityForName("CSDepartment", inManagedObjectContext: manager.managedContext) //Save context manager.saveContext() //Get and print all departments let request = NSFetchRequest(entityName: "CSDepartment") let departments = manager.managedContext.executeFetchRequest(request, error: nil) println("Departments: \(departments)") return true }
      
      







рд╣рдо рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рд╣рдо рд▓реЙрдЧ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ рдФрд░ рд╣рдо рджреБрдЦреА рд╣реИрдВред рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдВрджреБ:







рд╣рдордиреЗ рдлрд╛рдЗрд▓ рдореЗрдВ рдбрд╛рд▓ рджрд┐рдпрд╛


рдиреЗрдЯрд╡рд░реНрдХ рдореЗрдВ рдЗрдзрд░-рдЙрдзрд░ рднрдЯрдХрдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рдЗрд╢рд╛рд░реЛрдВ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдкрд╛рдИ рдЬреЛ рдХреЛрдб рдХрд╛ рдХрд╛рдо рдХрд░рддреА рд╣реИред рддреЛ рдЖрдкрдХреЛ рдХреНрдпрд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:



рдЪрд░рдг 1. рдЙрджреНрджреЗрд╢реНрдп-рд╕реА рдХреЗ рд╕рд╛рде рд╕рдВрдЧрддред


рдХрд╣реАрдВ рди рдХрд╣реАрдВ рд╣реБрдб рдХреЗ рддрд╣рдд, рд╣рдо рдлрд┐рд░ рд╕реЗ рд╕реНрд╡рдЪреНрдЫ рдЙрджреНрджреЗрд╢реНрдп-рд╕реА рдХреЙрд▓ рдЪрд▓рд╛ рд░рд╣реЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдЕрдкрдиреЗ рдирдП рд╡рд░реНрдЧ рдХреЛ рдЙрджреНрджреЗрд╢реНрдп-рд╕реА рдХреЙрд▓ рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╣рдо рдЗрд╕реЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рд╛рдорд╛рдиреНрдп рддрд░реАрдХреЗ рд╕реЗ @objc()



рдирд┐рд░реНрджреЗрд╢ рдХреЗ рдХрд╛рд░рдг рдХрд░рддреЗ рд╣реИрдВ



рдЪрд░рдг 2. рдореЙрдбрд▓ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдкреАрд╕реЗрдВред


рдпрд╣ рдПрдХ рд╕реНрдкрд╖реНрдЯ рдХрджрдо рдирд╣реАрдВ рд╣реИ - рд╣рдореЗрдВ рдЕрдкрдиреЗ рдореЙрдбрд▓ рдХреА рдлрд╝рд╛рдЗрд▓ рдХреЛ рдлрд┐рд░ рд╕реЗ рдЪреБрдирдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдЙрд╕ рдореЙрдбрд▓ рдХреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рд╣рд╛рде рд╕реЗ рд╣рд╛рде рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдЬреЛ рдЗрдХрд╛рдИ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИред



рдЫрд╡рд┐



рдЪрд░рдг 3. рдХреЙрд╕реНрдореЗрдЯрд┐рдХред


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



рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдорд╛рд░реА рдХрдХреНрд╖рд╛ рдХрд╛ рдХреЛрдб рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрдиреЗ рд▓рдЧрд╛:



 import Foundation import CoreData import UIKit @objc(CSDepartment) class CSDepartment : NSManagedObject{ @NSManaged var title: NSString @NSManaged var internalID: NSNumber @NSManaged var phone: NSString? override func awakeFromInsert() { self.title = "New department" self.internalID = 0 } func description() -> NSString{ return "Department: className=\(self.dynamicType.description()), title=\(self.title), id=[\(self.internalID)] and phone=\(self.phone)" } }
      
      







рд╣рдо рдЕрдкрдиреЗ рдкрд░реАрдХреНрд╖рдг рдлрд┐рд░ рд╕реЗ рдЪрд▓рд╛рддреЗ рд╣реИрдВ - рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЖрдк рдЖрдирдиреНрджрд┐рдд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред



рд░рд┐рд╢реНрддреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛



рддреЛ, рддреБрдЪреНрдЫ рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЗ рд╕рд╛рде рд╣рд▓ рдХрд┐рдпрд╛ред рд╕рд╛рджреГрд╢реНрдп рд╕реЗ, рдЖрдк CSEmployee



рдирд┐рдХрд╛рдп рдХрд╛ рд╡рд┐рд╡рд░рдг рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдорд╛рд░реЗ рд╕рд┐рд╕реНрдЯрдо рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдПрдХ рд╣реА рдХрд╛рдо рдХрд░рдирд╛ рдмрд╛рдХреА рд╣реИ - рдХрдиреЗрдХреНрд╢рди рдЬреЛрдбрд╝рдиреЗ рдФрд░ рд╣рдЯрд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ред рд╡рд┐рднрд╛рдЧ рдФрд░ рд╣рдорд╛рд░реЗ рдХрд░реНрдордЪрд╛рд░рд┐рдпреЛрдВ рдХреЗ рдмреАрдЪ рд╕рдВрдмрдВрдз рдПрдХ-рд╕реЗ-рдХрдИ рд╣реИрдВред рдпрд╣рд╛рдВ, рдирдИ рднрд╛рд╖рд╛ рдФрд░ Xcode рдиреЗ рджреЛ рддрд░рд╣ рд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд┐рдпрд╛ред

рдХрд░реНрдордЪрд╛рд░реА рд╕реЗ рд╡рд┐рднрд╛рдЧ рддрдХ рд╕рдВрдЪрд╛рд░ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рдм рдХреБрдЫ рддреБрдЪреНрдЫ рд╣реЛ рдЧрдпрд╛ - рдмрд╕ рдПрдХ рдФрд░ рдПрдХ рдХреЛ рдЗрд╕рдХреЗ рдЧреБрдгреЛрдВ рдХреА рд╕реВрдЪреА рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ рдЬреЛ рд╡рд┐рднрд╛рдЧ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИред рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░, рд╣рдорд╛рд░рд╛ рдХрд░реНрдордЪрд╛рд░реА рд╡рд░реНрдЧ рдРрд╕рд╛ рджрд┐рдЦрдиреЗ рд▓рдЧрд╛ (рдореИрдВрдиреЗ рд╕реНрд╡рдпрдВ рд╕реЗ рд╡реИрд╢реНрд╡рд┐рдХ рд╕рд░рдгрд┐рдпреЛрдВ рд╕реЗ рдкрд╣рд▓реЗ рдФрд░ рдЕрдВрддрд┐рдо рдирд╛рдореЛрдВ рдХреА рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдкреАрдврд╝реА рдХреЛ рдЬреЛрдбрд╝рд╛):



 import Foundation import CoreData let st_fNames = ["John", "David", "Michael", "Bob"] let st_lNames = ["Lim", "Jobs", "Kyler"] @objc(CSEmployee) class CSEmployee:NSManagedObject{ @NSManaged var firstName: NSString @NSManaged var lastName: NSString @NSManaged var age: NSNumber? @NSManaged var department: CSDepartment override func awakeFromInsert() { super.awakeFromInsert() self.firstName = st_fNames[Int(arc4random_uniform(UInt32(st_fNames.count)))] self.lastName = st_lNames[Int(arc4random_uniform(UInt32(st_lNames.count)))] } func description() -> NSString{ return "Employee: name= \(self.firstName) \(self.lastName), age=\(self.age) years" } }
      
      







рд▓реЗрдХрд┐рди рд╡рд┐рднрд╛рдЧ рдХреА рдУрд░ рд╕реЗ рддрдВрддреНрд░ рдХреЗ рд╕рдорд░реНрдерди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЕрдкрдиреЗ рд╣рд╛рде рдореЗрдВ рд▓реЗрдирд╛ рдкрдбрд╝рд╛ - рдХреНрдпреЛрдВрдХрд┐ рдлрд┐рд░ рд╕реЗ, рдХреЛрдб рдкреАрдврд╝реА рдЯреВрдЯрдиреЗ рдХреЗ рдХрд╛рд░рдг, рдмрдЪреНрдЪреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рджреВ рдХреЗ рддрд░реАрдХреЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдХреБрд▓ рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рд░реНрдп рдХрд░рддреЗ рд╣реИрдВ:







рдирддреАрдЬрддрди, рд╣рдорд╛рд░реА рдХрдХреНрд╖рд╛ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрдиреЗ рд▓рдЧреА:



 import Foundation import CoreData @objc(CSDepartment) class CSDepartment : NSManagedObject{ @NSManaged var title: NSString @NSManaged var internalID: NSNumber @NSManaged var phone: NSString? @NSManaged var employees: NSSet override func awakeFromInsert() { self.title = "New department" self.internalID = 0 } func description() -> NSString{ let employeesDescription = self.employees.allObjects.map({employee in employee.description()}) return "Department: title=\(self.title), id=[\(self.internalID)], phone=\(self.phone) and employees = \(employeesDescription)" } //Working with Employees func addEmployeesObject(employee: CSEmployee?){ let set:NSSet = NSSet(object: employee) self.addEmployees(set) } func removeEmployeesObject(employee: CSEmployee?){ let set:NSSet = NSSet(object: employee) self.removeEmployees(set) } func addEmployees(employees: NSSet?){ self.willChangeValueForKey("employees", withSetMutation: NSKeyValueSetMutationKind.UnionSetMutation, usingObjects: employees) self.primitiveValueForKey("employees").unionSet(employees) self.didChangeValueForKey("employees", withSetMutation: NSKeyValueSetMutationKind.UnionSetMutation, usingObjects: employees) } func removeEmployees(employees: NSSet?){ self.willChangeValueForKey("employess", withSetMutation: NSKeyValueSetMutationKind.MinusSetMutation, usingObjects: employees) self.primitiveValueForKey("employees").minusSet(employees) self.didChangeValueForKey("employees", withSetMutation: NSKeyValueSetMutationKind.MinusSetMutation, usingObjects: employees) } }
      
      







рдЕрдВрддрд┐рдо рд╕рддреНрдпрд╛рдкрди рдХреЛрдб рдФрд░ рд╢реЗрд╖ рдореБрджреНрджреЗ



рдЕрдВрддрддрдГ, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдорд╛рдпреЛрдЬрди рдХрд┐рдП рдЧрдП:





рддреЛ, рдкрд░рд┐рдгрд╛рдореА AppDelegate рдХреЛрдб:



 import UIKit import CoreData @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: NSDictionary?) -> Bool { //Get manager let manager = CSDataManager.sharedInstance() //Testing insert new objects let newDepartment : CSDepartment = NSEntityDescription.insertNewObjectForEntityForName("CSDepartment", inManagedObjectContext: manager.managedContext) as CSDepartment let newEmployee: CSEmployee = NSEntityDescription.insertNewObjectForEntityForName("CSEmployee", inManagedObjectContext: manager.managedContext) as CSEmployee let newEmployee2: CSEmployee = NSEntityDescription.insertNewObjectForEntityForName("CSEmployee", inManagedObjectContext: manager.managedContext) as CSEmployee newEmployee.department = newDepartment newDepartment.addEmployeesObject(newEmployee2) manager.saveContext() //Get and print all departments println("Have add oen department and two employees") println("Departments: \(manager.departments())") println("Employees: \(manager.employees())") //Testing remove child object newDepartment.removeEmployeesObject(newEmployee2) manager.saveContext() println("Have delete one employee") println("Departments: \(manager.departments())") //Testing cascade remove manager.managedContext.deleteObject(newDepartment) manager.saveContext() println("\nHave delete department") println("Departments: \(manager.departments())") println("Employees: \(manager.employees())") //Uncomment to remove all records // let departments = manager.departments() // for i in 0..departments.count{ // let dep = departments[i] as CSDepartment // manager.managedContext.deleteObject(dep) // } // let employees = manager.employees() // for i in 0..employees.count{ // let emp = employees[i] as CSEmployee // manager.managedContext.deleteObject(emp) // } // manager.saveContext() // println("\nHave delete all data") // println("Departments: \(manager.departments())") // println("Employees: \(manager.employees())") return true } }
      
      







рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрдЧ рдкрд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ - рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдХреИрд╕реНрдХреЗрдбрд┐рдВрдЧ рд╣рдЯрд╛рдирд╛ рдПрдХ рдзрдорд╛рдХреЗ рдХреЗ рд╕рд╛рде рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЬрдм рд╣рдЯрд╛рдиреЗ рд╡рд╛рд▓реЗ рдХрд░реНрдордЪрд╛рд░рд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд┐рднрд╛рдЧ рд╕реЗ рдХрд░реНрдордЪрд╛рд░рд┐рдпреЛрдВ рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ removeEmployeesObject removeEmployees



рд╣рдЯрд╛рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдХрд░реНрдордЪрд╛рд░рд┐рдпреЛрдВ рдХреЗ рддрд░реАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ removeEmployeesObject removeEmployees



, рддреЛ рд╡рд┐рднрд╛рдЧ рдХреЛ рдХреЛрдИ рднреА рд╕рдВрдХреЗрддрдХ рдмрд╛рд▓ рд╡рд╕реНрддреБрдУрдВ рдкрд░ рд░реАрд╕реЗрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рддрджрдиреБрд╕рд╛рд░, рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдЕрднреА рднреА рднрдВрдбрд╛рд░рдг рдореЗрдВ рд╕рд┐рд╕реНрдЯрдо рджреНрд╡рд╛рд░рд╛ рдЪреБрд░рд╛рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред

рдЕрджреНрдпрддрди: рдпрд╣ рдмрдЧ рдирд╣реАрдВ рд╣реИ - рдЙрджреНрджреЗрд╢реНрдп-рд╕реА рдХреЛрдб рд╕рдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддрд╛ рд╣реИ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдХреБрдЫ рднреНрд░рдорд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдЗрди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рдПрдХ рд╡рд╛рд╕реНрддреБ рджреГрд╖реНрдЯрд┐рдХреЛрдг рджреНрд╡рд╛рд░рд╛ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред



рдирд┐рд╖реНрдХрд░реНрд╖



рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЖрдк рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЖрддреНрдорд╛ рдореЗрдВ рджрд░реНрдж рдХреЗ рдмрд┐рдирд╛ рдирд╣реАрдВред рдЖрдкрдХреЛ рд╣рдореЗрд╢рд╛ рдлрд╛рдЗрд▓ рдХреЛ рд╕рдВрднрд╛рд▓ рдХрд░ рд░рдЦрдирд╛ рд╣реЛрдЧрд╛ред рдореБрдЭреЗ рд╕рдореБрд░рд╛рдИ рдХреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдорд╛рд░реНрдЧ рдХреА рдЦреЛрдЬ рдореЗрдВ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ, рд╕рдВрд╢реЛрдзрдиреЛрдВ рдФрд░ рдореБрдХреНрдд рдЪрд░реНрдЪрд╛ рдХреА рдЦреБрд╢реА рд╣реЛрдЧреАред



All Articles