Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«iOS. ΠŸΡ€ΠΈΠ΅ΠΌΡ‹ программирования». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 140

Автор Π’Π°Π½Π΄Π°Π΄ Нахавандипур

@class Manager;


@interface Employee: NSManagedObject

@property (nonatomic, retain) NSNumber * age;

@property (nonatomic, retain) NSString * firstName;

@property (nonatomic, retain) NSString * lastName;

@property (nonatomic, retain) Manager *manager;


@end


Как Π²ΠΈΠ΄ΠΈΡ‚Π΅, Π² этом Ρ„Π°ΠΉΠ»Π΅ появилось Π½ΠΎΠ²ΠΎΠ΅ свойство. Оно называСтся manager ΠΈ относится ΠΊ Ρ‚ΠΈΠΏΡƒ Manager. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, начиная с Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° ΠΌΡ‹ ΠΏΡ€ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ ссылки Π½Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° Employee ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ свойству manager, Π° Ρ‡Π΅Ρ€Π΅Π· Π½Π΅Π³ΠΎ β€” ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ Manager Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ сотрудника (Ссли ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ Π΅ΡΡ‚ΡŒ). Рассмотрим. h-Ρ„Π°ΠΉΠ» сущности Manager:


#import <Foundation/Foundation.h>

#import <CoreData/CoreData.h>


@class Employee;


@interface Manager: NSManagedObject

@property (nonatomic, retain) NSNumber * age;

@property (nonatomic, retain) NSString * firstName;

@property (nonatomic, retain) NSString * lastName;

@property (nonatomic, retain) NSSet *employees;

@end


@interface Manager (CoreDataGeneratedAccessors)


β€” (void)addFKManagerToEmployeesObject:(Employee *)value;

β€” (void)removeFKManagerToEmployeesObject:(Employee *)value;

β€” (void)addFKManagerToEmployees:(NSSet *)values;

β€” (void)removeFKManagerToEmployees:(NSSet *)values;

@end


Для сущности Manager Ρ‚Π°ΠΊΠΆΠ΅ создаСтся свойство employees. Π’ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… этого ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° β€” NSSet. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ свойство employees любого экзСмпляра сущности Manager ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΎΡ‚ 1 Π΄ΠΎ N сущностСй Employee. Π’ этом ΠΈ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ Β«ΠΎΠ΄ΠΈΠ½ ΠΊΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠΌΒ»: ΠΎΠ΄ΠΈΠ½ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€, нСсколько сотрудников.

Π”Ρ€ΡƒΠ³ΠΎΠΉ Ρ‚ΠΈΠΏ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, потрСбуСтся Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ, называСтся Β«ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΊΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠΌΒ». По ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ΠΌ Manager ΠΊ Employee ΠΏΡ€ΠΈ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΈ Β«ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΊΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠΌΒ» ΠΎΠ΄ΠΈΠ½ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ N сотрудников, Π° ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ сотрудник ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ΄Ρ‡ΠΈΠ½ΡΡ‚ΡŒΡΡ N ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Π°ΠΌ. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ Ρ‚Π΅ ΠΆΠ΅ инструкции, Ρ‡Ρ‚ΠΎ ΠΈ ΠΏΡ€ΠΈ создании ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ Β«ΠΎΠ΄ΠΈΠ½ ΠΊΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠΌΒ», Π½ΠΎ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚Π΅ ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒ Employee, Π° ΠΏΠΎΡ‚ΠΎΠΌ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ manager. Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚Π΅ это Π½Π°Π·Π²Π°Π½ΠΈΠ΅ Π½Π° managers ΠΈ установитС Ρ„Π»Π°ΠΆΠΎΠΊ To-Many Relationship (ΠžΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ ΠΊΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠΌ) (рис. 16.19). Π’Π΅ΠΏΠ΅Ρ€ΡŒ стрСлка Π±ΡƒΠ΄Π΅Ρ‚ заострСна с ΠΎΠ±ΠΎΠΈΡ… ΠΊΠΎΠ½Ρ†ΠΎΠ².


Рис. 16.19. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ Β«ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΊΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠΌΒ» ΠΌΠ΅ΠΆΠ΄Ρƒ сущностями Manager ΠΈ Employee


Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΎΡ‚ΠΊΡ€Ρ‹Π² Ρ„Π°ΠΉΠ» Employee.h, Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ Π΅Π³ΠΎ содСрТимоС измСнилось:


#import <Foundation/Foundation.h>

#import <CoreData/CoreData.h>


@class Manager;


@interface Employee: NSManagedObject


@property (nonatomic, retain) NSNumber * age;

@property (nonatomic, retain) NSString * firstName;

@property (nonatomic, retain) NSString * lastName;

@property (nonatomic, retain) NSSet *managers;

@end


@interface Employee (CoreDataGeneratedAccessors)


β€” (void)addManagersObject:(Manager *)value;

β€” (void)removeManagersObject:(Manager *)value;

β€” (void)addManagers:(NSSet *)values;

β€” (void)removeManagers:(NSSet *)values;


@end


Как Π²ΠΈΠ΄ΠΈΡ‚Π΅, свойство managers сущности Person Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ прСдставляСт собой мноТСство. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ сотрудника ΠΊ Π΅Π³ΠΎ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Π°ΠΌ β€” это мноТСство ΠΈ Ρ‚Π°ΠΊΠΎΠ΅ ΠΆΠ΅ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ сущСствуСт ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ΠΎΠΌ ΠΈ сотрудниками, здСсь ΠΌΡ‹ ΠΈΠΌΠ΅Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ Β«ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΊΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠΌΒ»

Π’ ΠΊΠΎΠ΄Π΅, написанном для ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ Β«ΠΎΠ΄ΠΈΠ½ ΠΊΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠΌΒ», ΠΌΠΎΠΆΠ½ΠΎ просто ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ управляСмый ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Manager (ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ Π²ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π² контСкст управляСмых ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², рассказано Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ 16.3), ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π² контСкстС управляСмых ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Π° ΠΏΠΎΡ‚ΠΎΠΌ ΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ с ΠΏΠ°Ρ€ΠΎΠΉ управляСмых ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Employee β€” ΠΈ ΠΈΡ… Ρ‚ΠΎΠΆΠ΅ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π² контСкстС. Π’Π΅ΠΏΠ΅Ρ€ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π°ΡΡΠΎΡ†ΠΈΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Π° с сотрудником, Π·Π°Π΄Π°ΠΉΡ‚Π΅ Π² качСствС значСния для свойства FKEmployeeToManager, относящСгося ΠΊ экзСмпляру Employee, экзСмпляр управляСмого ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Manager. ПослС этого Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ Core Data сам создаст Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ΅ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅.

Если потрСбуСтся ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ всСх сотрудников (Ρ‚ΠΈΠΏΠ° Employee), ассоциированных с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ-ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ΠΎΠΌ (Ρ‚ΠΈΠΏΠ° Manager), Π½ΡƒΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ просто Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ экзСмпляра allObjects, относящимся ΠΊ свойству FKManagerToEmployees вашСго ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°-ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Π°. Π­Ρ‚ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° NSSet, поэтому ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ экзСмпляра allObjects, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ массив всСх ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²-сотрудников, ассоциированных с ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ-ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ΠΎΠΌ.

16.9. Π’Ρ‹Π±ΠΎΡ€ΠΊΠ° Π΄Π°Π½Π½Ρ‹Ρ… Π² Ρ„ΠΎΠ½ΠΎΠ²ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅

ΠŸΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° Π·Π°Π΄Π°Ρ‡ΠΈ

ВрСбуСтся Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π²Ρ‹Π±ΠΎΡ€ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Π² стСкС Core Data, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ„ΠΎΠ½ΠΎΠ²ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅. Π­Ρ‚ΠΎ отличная Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΏΠΎ-настоящСму ΠΎΡ‚Π·Ρ‹Π²Ρ‡ΠΈΠ²Ρ‹ΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ интСрфСйс.

РСшСниС

ΠŸΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ ΠΊΠ°ΠΊ Π·Π°Π½ΠΈΠΌΠ°Ρ‚ΡŒΡΡ Π²Ρ‹Π±ΠΎΡ€ΠΊΠΎΠΉ Π΄Π°Π½Π½Ρ‹Ρ… Π² Ρ„ΠΎΠ½ΠΎΠ²ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅, создайтС Π½ΠΎΠ²Ρ‹ΠΉ контСкст управляСмых ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² с ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌΠΎΠΌ Ρ‚ΠΈΠΏΠ° NSPrivateQueueConcurrencyType. Π—Π°Ρ‚Π΅ΠΌ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ΡΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ performBlock: Π½ΠΎΠ²ΠΎΠ³ΠΎ Ρ„ΠΎΠ½ΠΎΠ²ΠΎΠ³ΠΎ контСкста для Π²Ρ‹Π±ΠΎΡ€ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Π² Ρ„ΠΎΠ½ΠΎΠ²ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅. Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ это Π±ΡƒΠ΄Π΅Ρ‚ сдСлано ΠΈ Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π² ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠΌ интСрфСйсС, Π²Π΅Ρ€Π½ΠΈΡ‚Π΅ΡΡŒ Π² ΠΏΠΎΡ‚ΠΎΠΊ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ интСрфСйса с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ dispatch_async (см. Ρ€Π°Π·Π΄Π΅Π» 7.4). Π”Π°Π»Π΅Π΅ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠ³ΠΎ Π² Ρ„ΠΎΠ½ΠΎΠ²ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ Π² основном контСкстС ΠΌΠ΅Ρ‚ΠΎΠ΄ objectWithID:. Π’Π°ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹Π΅ Π² Ρ„ΠΎΠ½ΠΎΠ²ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅, Π±ΡƒΠ΄ΡƒΡ‚ пСрСнСсСны Π² ваш ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Π½Ρ‹ΠΉ контСкст, Π³Π΄Π΅ Π²Ρ‹ смоТСтС ΠΎΠΏΠ΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠΌΠΈ Π² ΠΏΠΎΡ‚ΠΎΠΊΠ΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ интСрфСйса.

ΠžΠ±ΡΡƒΠΆΠ΄Π΅Π½ΠΈΠ΅

Π’Ρ‹Π±ΠΎΡ€ΠΊΠ° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² основном ΠΏΠΎΡ‚ΠΎΠΊΠ΅ β€” Π½Π΅ самая Ρ…ΠΎΡ€ΠΎΡˆΠ°Ρ идСя. Π’Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Π΅Π΅ Π² Π³Π»Π°Π²Π½ΠΎΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠ΅ ΠΌΠΎΠΆΠ½ΠΎ лишь Π² случаях, ΠΊΠΎΠ³Π΄Π° Π² стСкС Core Data совсСм Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ элСмСнтов. Π”Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π²Ρ‹Π±ΠΎΡ€ΠΊΠΈ Π² Core Data ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ выполняСтся поисковый Π²Ρ‹Π·ΠΎΠ². Π—Π°Ρ‚Π΅ΠΌ этот Π²Ρ‹Π·ΠΎΠ² Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ для вас ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅, ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΡ€Π΅Π΄ΠΈΠΊΠ°Ρ‚Π°. Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ интСрфСйс Π±ΠΎΠ»Π΅Π΅ ΠΎΡ‚Π·Ρ‹Π²Ρ‡ΠΈΠ²Ρ‹ΠΌ, Π»ΡƒΡ‡ΡˆΠ΅ всСго Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π²Ρ‹Π±ΠΎΡ€ΠΊΠΈ Π² Ρ„ΠΎΠ½ΠΎΠ²ΠΎΠΌ контСкстС.

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ контСкстов, сколько Π·Π°Ρ…ΠΎΡ‚ΠΈΡ‚Π΅, ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΏΠΎΠΌΠ½ΠΈΡ‚Π΅ ΠΎΠ± ΠΎΠ΄Π½ΠΎΠΌ ΠΆΠ΅Π»Π΅Π·Π½ΠΎΠΌ ΠΏΡ€Π°Π²ΠΈΠ»Π΅. НСльзя ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ управляСмыС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΌΠ΅ΠΆΠ΄Ρƒ контСкстами Π² Ρ€Π°Π·Π½Ρ‹Ρ… ΠΏΠΎΡ‚ΠΎΠΊΠ°Ρ…, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ потокобСзопасными. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ссли Π²Ρ‹ Π²Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π² Ρ„ΠΎΠ½ΠΎΠ²ΠΎΠΌ контСкстС, Ρ‚ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… Π² Π³Π»Π°Π²Π½ΠΎΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠ΅. Π’ΠΎΡ‚ ΠΊΠ°ΠΊ слСдуСт ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ управляСмыС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ: ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ выбираСтся Π² Ρ„ΠΎΠ½ΠΎΠ²ΠΎΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠ΅, Π° ΠΏΠΎΡ‚ΠΎΠΌ пСрСносится Π² Π³Π»Π°Π²Π½Ρ‹ΠΉ контСкст (контСкст, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠΉ Π² основном ΠΏΠΎΡ‚ΠΎΠΊΠ΅). Π­Ρ‚ΠΎ дСлаСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° objectWithID: Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ контСкста. Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° NSManagedObjectID. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π² Ρ„ΠΎΠ½ΠΎΠ²ΠΎΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠ΅ ΠΌΡ‹ Π½Π° самом Π΄Π΅Π»Π΅ Π½Π΅ Π²Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ управляСмыС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΊΠ°ΠΊ Ρ‚Π°ΠΊΠΎΠ²Ρ‹Π΅, Π° лишь Π±Π΅Ρ€Π΅ΠΌ ΠΈΡ… сохраняСмыС ID, послС Ρ‡Π΅Π³ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅ΠΌ эти ID Π³Π»Π°Π²Π½ΠΎΠΌΡƒ контСксту, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ сам ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ для вас управляСмый ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. Π˜Ρ‚Π°ΠΊ, Π²Ρ‹ выполняСтС Π² Ρ„ΠΎΠ½ΠΎΠ²ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅ ΠΈ поиск, ΠΈ Π²Ρ‹Π±ΠΎΡ€ΠΊΡƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Π·Π°Ρ‚Π΅ΠΌ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚Π΅ ID Π½Π°ΠΉΠ΄Π΅Π½Π½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π³Π»Π°Π²Π½ΠΎΠΌΡƒ контСксту. ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ΠΌ самих ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² занимаСтся ΡƒΠΆΠ΅ Π³Π»Π°Π²Π½Ρ‹ΠΉ контСкст. Если Π΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π³Π»Π°Π²Π½Ρ‹ΠΉ контСкст Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒ сохраняСмыми ID ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Π° ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ этих ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈΠ· постоянного Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° Π² Ρ‚Π°ΠΊΠΎΠΉ ситуации ΠΏΡ€ΠΎΡ‚Π΅ΠΊΠ°Π΅Ρ‚ Π³ΠΎΡ€Π°Π·Π΄ΠΎ быстрСС, Ρ‡Π΅ΠΌ ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΏΠΎΠ»Π½ΠΎΠΌΠ°ΡΡˆΡ‚Π°Π±Π½ΠΎΠ³ΠΎ поиска Π² Π³Π»Π°Π²Π½ΠΎΠΌ контСкстС.

Π’ этом Ρ€Π°Π·Π΄Π΅Π»Π΅ прСдполагаСтся, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΡƒΠΆΠ΅ создали модСль управляСмых ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Person. Подобная модСль ΠΏΠΎΠΊΠ°Π·Π°Π½Π° Π½Π° рис. 16.20.


Рис. 16.20. ΠŸΡ€ΠΎΡΡ‚Π°Ρ модСль Core Data, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠ°Ρ Π² этом Ρ€Π°Π·Π΄Π΅Π»Π΅


ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с этой модСлью я заполню стСк 1000 ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Person, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΊΠΎΠ΄Π΅, Π° ΡƒΠΆΠ΅ ΠΏΠΎΡ‚ΠΎΠΌ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΡŽ Π²Ρ‹Π±ΠΈΡ€Π°Ρ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΈΠ· стСка:


β€” (void) populateDatabase{


for (NSUInteger counter = 0; counter < 1000; counter++){

Person *person =

[NSEntityDescription

insertNewObjectForEntityForName: NSStringFromClass([Person class])

inManagedObjectContext: self.managedObjectContext];


person.firstName = [NSString stringWithFormat:@"First name %lu",

(unsigned long)counter];


person.lastName = [NSString stringWithFormat:@"Last name %lu",

(unsigned long)counter];

person.age = @(counter);

}


NSError *error = nil;

if ([self.managedObjectContext save:&error]){

NSLog(@"Managed to populate the database.");

} else {

NSLog(@"Failed to populate the database. Error = %@", error);

}


}

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: я ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ класс NSStringFromClass для прСобразования ΠΈΠΌΠ΅Π½ΠΈ класса Person Π² строку ΠΈ для ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ инстанцирования ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Ρ‚Π°ΠΊΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°. НСкоторыС программисты ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°ΡŽΡ‚ Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Person ΠΊΠ°ΠΊ строковый Π»ΠΈΡ‚Π΅Ρ€Π°Π». Но Ссли ТСстко Π·Π°ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²Π°ΡˆΡƒ строку Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°. Допустим, ΠΏΠΎΠ·ΠΆΠ΅ Π²Ρ‹ Ρ€Π΅ΡˆΠΈΡ‚Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ имя Person Π² стСкС Core Data, Π° ТСстко закодированная строка Π½ΠΈΠΊΡƒΠ΄Π° Π½Π΅ дСнСтся. Она ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ Π°Π²Π°Ρ€ΠΈΠΉΠ½ΠΎΠΌΡƒ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡŽ вашСго прилоТСния Π²ΠΎ врСмя исполнСния, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΌΠΎΠ΄Π΅Π»ΠΈ с ΠΈΠΌΠ΅Π½Π΅ΠΌ Person большС Π½Π΅ сущСствуСт. Но Ссли Π²Ρ‹ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚Π΅ Π²Ρ‹ΡˆΠ΅ΡƒΠΏΠΎΠΌΡΠ½ΡƒΡ‚ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ для прСобразования ΠΈΠΌΠ΅Π½ΠΈ класса Π² ΠΎΠ±Ρ‹Ρ‡Π½ΡƒΡŽ строку, Ρ‚ΠΎ ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΠΈΠΌΠ΅Π½ΠΈ класса ΠΈΠ»ΠΈ отсутствии Ρ‚Π°ΠΊΠΎΠ³ΠΎ класса ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ ΠΎΡˆΠΈΠ±ΠΊΡƒ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ компиляции. Π’Π°ΠΊΠΈΠ΅ ошибки Π²Ρ‹ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π΅Ρ‰Π΅ Π΄ΠΎ Π²Π²ΠΎΠ΄Π° прилоТСния Π² Ρ€Π°Π±ΠΎΡ‚Ρƒ, ΠΈ Ρƒ вас Π±ΡƒΠ΄Π΅Ρ‚ врСмя ΠΈΡ… ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ.