@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 Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ. ΠΠΎ Π΅ΡΠ»ΠΈ Π²Ρ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΠ΅ Π²ΡΡΠ΅ΡΠΏΠΎΠΌΡΠ½ΡΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ Π΄Π»Ρ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ ΠΈΠΌΠ΅Π½ΠΈ ΠΊΠ»Π°ΡΡΠ° Π² ΠΎΠ±ΡΡΠ½ΡΡ ΡΡΡΠΎΠΊΡ, ΡΠΎ ΠΏΡΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΠΈΠΌΠ΅Π½ΠΈ ΠΊΠ»Π°ΡΡΠ° ΠΈΠ»ΠΈ ΠΎΡΡΡΡΡΡΠ²ΠΈΠΈ ΡΠ°ΠΊΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ ΠΎΡΠΈΠ±ΠΊΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ. Π’Π°ΠΊΠΈΠ΅ ΠΎΡΠΈΠ±ΠΊΠΈ Π²ΡΡΠ²Π»ΡΡΡΡΡ Π΅ΡΠ΅ Π΄ΠΎ Π²Π²ΠΎΠ΄Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π² ΡΠ°Π±ΠΎΡΡ, ΠΈ Ρ Π²Π°Ρ Π±ΡΠ΄Π΅Ρ Π²ΡΠ΅ΠΌΡ ΠΈΡ ΠΈΡΠΏΡΠ°Π²ΠΈΡΡ.