Мне трудно понять, как Core Data обрабатывает свою базу данных. Я объясню мои проблемы на конкретном примере:
Давайте просто скажем, что у нас есть следующая схема, где есть отделы, которые ведут многочисленные учетные записи (наши адреса).
Я создал файл основных данных с помощью редактора. В классе CachedDepartment я добавил необходимые атрибуты и создал отношение «ко многим», и я выбрал «Inverse» для «свойства Department моего CachedAccount. CacheAccount также имеет атрибуты и отношение, обратное к» адреса "отношения CachedDepartment.
У меня есть следующие источники (я даю вам 2 заголовочных файла. Остальные не содержат ничего интересного):
@interface CachedAccount : NSManagedObject {
@private
}
@property (nonatomic, retain) NSNumber * accountID;
@property (nonatomic, retain) NSString * email;
@property (nonatomic, retain) NSString * name;
@property (nonatomic, retain) CachedDepartment *department;
@end
@class CachedAccount;
@interface CachedDepartment : NSManagedObject {
@private
}
@property (nonatomic, retain) NSString * departmentID;
@property (nonatomic, retain) NSString * departmentName;
@property (nonatomic, retain) NSSet *addresses;
@end
@interface CachedDepartment (CoreDataGeneratedAccessors)
- (void)addAddressesObject:(CachedAccount *)value;
- (void)removeAddressesObject:(CachedAccount *)value;
- (void)addAddresses:(NSSet *)values;
- (void)removeAddresses:(NSSet *)values;
@end
А теперь вопросы:
- Как создать учетную запись и объекты отделов, чтобы установить отношение один-ко-многим?
- Что мне делать с CoreDataGeneratedAccessors? После создания я должен вызвать функцию -addAddressesObject CachedDepartment или мне нужно будет сделать что-то вроде anAccount.department = aDepartment и все?
- В каждом случае при создании объектов я могу быть уверен, что добавление адреса в отдел не создаст двойной экземпляр адреса и не сохранит его?
Буду признателен за любые идеи по этому поводу.
EDIT:
Если вставка новых объектов для сущности CachedDepartment будет выглядеть следующим образом:
NSManagedObject *cachedDepartment= [NSEntityDescription
insertNewObjectForEntityForName:@"CachedDepartment"
inManagedObjectContext:[self managedObjectContext]];
/*
set values for failedBankInfo here
*/
NSError *error;
if (![context save:&error]) {
NSLog(@"The following error occured: %@", [error localizedDescription]);
}
тогда добавление новой записи для cachedAccounts, которая будет иметь отношение один ко многим с вновь вставленным объектом cachedDepartment, будет примерно таким:
NSManagedObject *cachedAccounts = [NSEntityDescription
insertNewObjectForEntityForName:@"CachedAccounts"
inManagedObjectContext:[<b>cachedDepartment managedObjectContext</b>]];
/*
set values for failedBankInfo here
*/
//setting the one-to-many relationship
[cachedDepartment addCachedAccountObject:cachedAccount];
[cachedAccount setCachedDepartment:cachedDepartment];
//
NSError *error;
if (![context save:&error]) {
NSLog(@" couldn't save: %@", [error localizedDescription]);