Вы можете переопределить основные данные, созданные аксессорами.Вы должны обратить внимание на несколько особых вещей, таких как вызовы willChangeValueForKey
и didChangeValueForKey
, но помимо переопределения методов доступа это почти то же самое, что и всегда.
Прочитайте документацию Apple: https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CoreData/Articles/cdAccessorMethods.html
Это ясно объяснено множеством примеров.Просто обратите внимание на разницу между отношениями «один к одному» и «один ко многим».
Вам не нужно реализовывать обратную функциональность, это делается с помощью Core Data.Если вы позвоните по номеру list.AddItem
, для вас автоматически будет вызван item.setList
.
Так что просто добавьте нужный код для доступа к item.setList
.Таким образом, вы гарантируете, что при каждом добавлении элемента в список дата обновляется соответствующим образом.Не беспокойтесь о методах доступа к списку.
Ваш код будет выглядеть примерно так:
- (void)setList:(List *)value
{
[self willChangeValueForKey:@"list"];
[self setPrimitiveValue:[NSDate date] forKey:@"dateAdded"]; // use setValue:forKey: if you need KVO for dateAdded
[self setPrimitiveValue:value forKey:@"list"];
[self didChangeValueForKey:@"list"];
}
РЕДАКТИРОВАТЬ Я подумал еще раз, и вы можете захотетьзнать следующее:
Если вы настраиваете методы списка (то есть addItemObject
), вам также необходимо настроить setItems
.Кроме того, если ваш элемент добавлен в список, который, как оказалось, не является настроенным вами списком, ваш пользовательский код, конечно, не вызывается.
С другой стороны, если вы настраиваете метод setList
,код не вызывается, если для элемента нет изменений.
Например, если вы позвоните
[list addItems:[NSSet setWithObject:item]];
[list addItemsObject:item];
, тогда элемент доступа setList
элемента будет толькозвонил один раз!Звонки напрямую на item.setList
всегда выполняются, даже если ничего не изменилось.