При наблюдении значения ключа вам нужен какой-то экземпляр для наблюдения.Иногда это может быть тот же объект, который вызывает -setEndOn: on Medication;иногда это может быть что-то еще.Давайте предположим, что в вашем приложении есть класс MedicationManager, один экземпляр которого создан.И, кроме того, предположим, что в MedicationManager есть метод экземпляра -createMedicationWithName: startOn: endOn: как здесь:
- (Medication*) createMedicationWithName:(NSString*)medName startOn:(NSDate*)startDate endOn:(NSDate*)endDate
{
// Create and configure a new instance of the Compound entity
Medication *newMedication = (Medication *)[NSEntityDescription insertNewObjectForEntityForName:@"Medication"
inManagedObjectContext:[self managedObjectContext]];
[newMedication setName:medName];
[newMedication setStartOn:startDate];
[newMedication setEndOn:endDate];
// Set up KVO
[newMedication addObserver:self
forKeyPath:@"endOn"
options:NSKeyValueObservingOptionNew
context:nil];
return newCompound;
}
- (void) observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object
change:(NSDictionary *)change
context:(void *)context
{
if ([keyPath isEqualToString:@"endOn"])
{
// ... schedule local notification on the iOS device for (Medication*)object.
return;
}
}
или что-то в этом роде.
Примечаниехотел бы удалитьObserver ... Кроме того, при запуске приложения вам нужно будет установить MedicationManager в качестве наблюдателя для существующих лекарств.Я думаю, что это может быть так же просто, как перебирать все лекарства и вызывать addObserver для каждого.Если у вас много лекарств, вы можете сделать это более «ленивым» образом (например, в -awakeFromFetch).