рдорд▓реНрдЯреАрдереНрд░реЗрдбреЗрдб рдХреЛрд░ рдбреЗрдЯрд╛

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

рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рд╛рд╡рдзрд╛рди


рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдХреЛрд░ рдбреЗрдЯрд╛ рд╕реНрдЯреИрдХ рдореЗрдВ рдХрдИ рдореБрдЦреНрдп рднрд╛рдЧ рд╣реЛрддреЗ рд╣реИрдВред



1) NSPersistentStore, рдЬреЛ рдПрдХ рдмрд╛рдЗрдирд░реА рдлрд╝рд╛рдЗрд▓, XML, SQLite рдлрд╝рд╛рдЗрд▓ рд╣реЛ рд╕рдХрддреА рд╣реИред
2) NSManagedObjectModel, рдЬреЛ рдбреЗрдЯрд╛ рдореЙрдбрд▓ рдХрд╛ рд╕рдВрдХрд▓рд┐рдд рдмрд╛рдЗрдирд░реА рд╕рдВрд╕реНрдХрд░рдг рд╣реИред
3) NSPersistentStoreCoordinator, NSPersistentStore рдФрд░ NSManagedObjectModel, рдмрдЪрдд рдФрд░ рдХреИрд╢рд┐рдВрдЧ рд╕реЗ рдбреЗрдЯрд╛ рд▓реЛрдб рдХрд░рдиреЗ рдореЗрдВ рд▓рдЧрд╛ рд╣реБрдЖ рд╣реИред
4) NSManagedObjectContext, NSPersistentStore рд╕реЗ рдбреЗрдЯрд╛ рдХреЛ рдореЗрдореЛрд░реА рдореЗрдВ рд▓реЛрдб рдХрд░рдирд╛, рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХреЗ рд╕рд╛рде рдСрдкрд░реЗрд╢рдиред
5) NSManagedObject - рдбреЗрдЯрд╛ рдореЙрдбрд▓ рдХрд╛ рдЙрджреНрджреЗрд╢реНрдпред

рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдЗрд╕ рд╕рднреА рдЪрдорддреНрдХрд╛рд░ рдХреА рдЕрдкреНрд░рд┐рдп рд╡рд┐рд╢реЗрд╖рддрд╛ рдпрд╣ рд╣реИ рдХрд┐ NSManagedObjectContext рдереНрд░реЗрдб-рд╕реБрд░рдХреНрд╖рд┐рдд рдирд╣реАрдВ рд╣реИред

рд╕реНрдЯреИрдХ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди


рдмрдбрд╝реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдЖрдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде, рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдХреЗ рджреМрд░рд╛рди, рдореБрдЦреНрдп рдзрд╛рдЧреЗ рдкрд░ рд╕реНрдЯреИрдХ рдХрд╛ рдкреНрд░рд╛рд░рдВрдн 30 рд╕реЗрдХрдВрдб рд╕реЗ рдЕрдзрд┐рдХ рд╕рдордп рд▓реЗ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдХреЗрд╡рд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдорд╛рд░рдиреЗ рдХрд╛ рдХрд╛рд░рдг рдмрдиреЗрдЧрд╛ред рдПрдХ рддрд░реАрдХрд╛ рд╣реИ, рджреВрд╕рд░реЗ рдзрд╛рдЧреЗ рдореЗрдВ рд╕реНрдЯреИрдХ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рдирд╛ред

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ //  NSManagedObjectModel NSURL *modelURL = [[NSBundle mainBundle] URLForResource:kModelFileName withExtension:@"momd"]; NSManagedObjectModel *mom = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL]; //  NSPersistentStoreCoordinator NSPersistentStoreCoordinator *psc = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:mom]; //   NSPersistentStoreCoordinator ,          NSURL *doURL = [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject]; NSURL *storeURL = [doURL URLByAppendingPathComponent:@"CoreData.sqlite"]; NSError *error = nil; NSPersistentStore *store = [psc addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error]; //   }); 


рддреЛ, рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдХреЛ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдпреВрдЖрдИ рд▓реИрдЧреНрд╕ рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рд╣реБрдЖ рдерд╛, рд╣рд░ рдХреЛрдИ рдЦреБрд╢ рд╣реИред рд╣рдо рдЖрдЧреЗ рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░рддреЗ рд╣реИрдВред

рдореБрдЦреНрдп рд╕рдВрджрд░реНрднреЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг


рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдКрдкрд░ рд▓рд┐рдЦрд╛ рд╣реИ, NSManagedObjectContext рдереНрд░реЗрдб-рд╕реБрд░рдХреНрд╖рд┐рдд рдирд╣реАрдВ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдореБрдЦреНрдп рдереНрд░реЗрдб рдкрд░ рдореБрдЦреНрдп рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕рдВрджрд░реНрдн рд░рдЦрдирд╛ рдЙрдЪрд┐рдд рд╣реИред рд▓реЗрдХрд┐рди рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рдЗрд╕ рд╕рдВрджрд░реНрдн рдХреЛ рдмрдирд╛рдП рд░рдЦрддреЗ рд╣реБрдП UI рдХреЛ рдзреАрдорд╛ рдХрд░ рджреЗрдЧрд╛, рдореБрдЭреЗ рдХреНрдпрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП? рд▓реЗрдХрд┐рди рдпрд╣рд╛рдБ, iOS 6 рдореЗрдВ, NSManagedObjectContext рдкреНрд░рдХрд╛рд░ рджрд┐рдЦрд╛рдИ рджрд┐рдПред

1) NSMainQueueConcurrencyType - рдореБрдЦреНрдп рдзрд╛рдЧреЗ рд╕реЗ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЙрдкрд▓рдмреНрдз рд╣реИред
2) NSPStreetQueueConcurrencyType - рдПрдХ рдкреГрд╖реНрдарднреВрдорд┐ рдереНрд░реЗрдб рдкрд░ рдЪрд▓рддрд╛ рд╣реИред
3) NSConfinementConcurrencyType - рдЙрд╕ рдереНрд░реЗрдб рдкрд░ рдЪрд▓рддрд╛ рд╣реИ рдЬрд┐рд╕ рдкрд░ рдЗрд╕реЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред

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

 //           . // _daddyManagedObjectContext        ,  . _daddyManagedObjectContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType]; [_daddyManagedObjectContext setPersistentStoreCoordinator:psc]; //      main-thread context,     dispatch_async(dispatch_get_main_queue(), ^{ _defaultManagedObjectContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType]; //     ,       [_defaultManagedObjectContext setParentContext:_daddyManagedObjectContext]; }); 


рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░, рдХреЛрд░ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдкреНрд░рдмрдВрдзрдХ рдХреА рд╢реБрд░реБрдЖрдд рд╕рдорд╛рдкреНрдд рд╣реЛрддреА рд╣реИ, рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдкрд┐рддрд╛-рдкреНрд░рд╕рдВрдЧ рд╣реИ рдЬреЛ рдЖрдВрдЦреЛрдВ рдХреЛ рдЪреБрднрддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рд╕рд╛рде рдореБрдЦреНрдп рдзрд╛рдЧреЗ рдкрд░ рдПрдХ рдмреЗрдЯреА рднреА рд╣реИред

рдмрд╛рд▓ рд╕рдВрджрд░реНрднреЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг


рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЖрд╕рд╛рдиреА рд╕реЗ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрдм рдкреГрд╖реНрдарднреВрдорд┐ рдХреЗ рдкреНрд░рд╡рд╛рд╣ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рд╣рдо рдкреВрд░реНрд╡рдЬреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдКрдкрд░ рдмрдирд╛рдП рдЧрдП рд╣рдорд╛рд░реЗ рдмрдЪреНрдЪреЗ рдХреЗ рд╕рдВрджрд░реНрдн рдХреЛ рдЬреЛрдбрд╝рдХрд░ рдЕрдкрдиреЗ рд╕рдВрджрд░реНрднреЛрдВ рдХреЛ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред

 - (NSManagedObjectContext *)getContextForBGTask { NSManagedObjectContext *context = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType]; [context setParentContext:_defaultManagedObjectContext]; return context; } 


рд╕рд╣реЗрдЬреЗ рдЬрд╛рдиреЗ рдкрд░ рдпрд╣ рд╕рдВрджрд░реНрдн, рд╣рдореЗрд╢рд╛ рдЕрдкрдиреЗ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдмрдЪрд╛рдПрдЧрд╛ред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╣рдореЗрд╢рд╛ _defaultManagedObjectContext (рдЬреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ рдзрдХреНрдХрд╛ рджреЗрддрд╛ рд╣реИ) рдореЗрдВ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рд╣реЛрдЧреАред

рд╕реЗрд╡рд┐рдВрдЧ рдХреЙрдиреНрдЯреЗрдХреНрдЯреНрд╕


рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рд╕рдВрд░рдХреНрд╖рдг рд╣реИред рдкреГрд╖реНрдарднреВрдорд┐ рдзрд╛рд░рд╛рдУрдВ рдкрд░ рд░рд╣рдиреЗ рд╡рд╛рд▓реЗ рд╕рдВрджрд░реНрдн рдХреЗрд╡рд▓ PerformBlock: рдФрд░ performBlockAndWait: рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдб рд╕реНрдЯреНрд░реАрдо рдХреЛ рд╕реЗрд╡ рдХрд░рдирд╛ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛ред

 - (void)saveContextForBGTask:(NSManagedObjectContext *)bgTaskContext { if (bgTaskContext.hasChanges) { [bgTaskContext performBlockAndWait:^{ NSError *error = nil; [backgroundTaskContext save:&error]; }]; // Save default context } } 


рдмрдЪреНрдЪреЗ рдХреЗ рд╕рдВрджрд░реНрдн рдХреЛ рдмрдЪрд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреЛ рдмрдЪрд╛рдирд╛ рд╣реЛрдЧрд╛ред

 - (void)saveDefaultContext:(BOOL)wait { if (_defaultManagedObjectContext.hasChanges) { [_defaultManagedObjectContext performBlockAndWait:^{ NSError *error = nil; [_defaultManagedObjectContext save:&error]; }]; } //    _defaultManagedObjectContext    ,   _daddyManagedObjectContext void (^saveDaddyContext) (void) = ^{ NSError *error = nil; [_daddyManagedObjectContext save:&error]; }; if ([_daddyManagedObjectContext hasChanges]) { if (wait) [_daddyManagedObjectContext performBlockAndWait:saveDaddyContext]; else [_daddyManagedObjectContext performBlock:saveDaddyContext]; } } 


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


рдХрдИ рд╡рд░реНрд╖реЛрдВ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЕрдХреНрд╕рд░ рдбреЗрд╡рд▓рдкрд░реНрд╕ рд╕реЗ рд╕реБрдирддрд╛ рд╣реВрдВ рдХрд┐ рдХреЛрд░ рдбреЗрдЯрд╛ рдореЗрдВ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ minuses рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдкрд╕рдВрдж рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, FMDB , рдореБрдЦреНрдп рддрд░реНрдХ рдорд▓реНрдЯреАрдереНрд░реЗрдбрд┐рдВрдЧ рд╣реИ, рдпрд╛ рдпреЛрдВ рдХрд╣реЗрдВ, рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдХреЛрд░ рдбреЗрдЯрд╛ рдореЗрдВ рдЗрд╕рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рд╣реИред рд▓реЗрдЦ рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдЗрд╕ рдорд┐рдердХ рдХреЛ рджреВрд░ рдХрд░рдирд╛ рд╣реИред
рдХреЛрд░ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рд░реВрдкрд░реЗрдЦрд╛рдПрдБ рд▓рд┐рдЦреА рдЧрдИ рд╣реИрдВ, рдореБрдЦреНрдп рдПрдХ, рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, MagicalRecord рд╣реИ ред рдЗрд╕рдореЗрдВ рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╢рд╛рдорд┐рд▓ рд╣реИред рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдЕрдВрджрд░ рдпрд╣ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рд╡рд┐рдзрд┐ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд▓рдЧрднрдЧ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдХрд┐рд╕реА рднреА рдврд╛рдВрдЪреЗ рдХреЛ рдареАрдХ рд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рд╡рд╣ рд╕рдм рд╣реИред рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

Source: https://habr.com/ru/post/In218457/


All Articles