Использование KVO для наблюдения за изменениями свойства объекта внутри коллекции в Objective-C - PullRequest
1 голос
/ 17 апреля 2011

У меня есть объект базовых данных (AGroup), имеющий отношение ко многим к коллекции других объектов базовых данных (элементов, которые являются экземплярами ANItem).Я использую объект AGroup в UITableView (это на iOS), и порядок отображения элементов определяется свойством элементов (sortProperty).Итак, с точки зрения кода (игнорируя, что они являются объектами Core Data, так что это полупсевдокод), это выглядит так:

@interface AGroup : NSManagedObject
{
    NSSet *items; // these are instances of ANItem
}
@property (retain) NSSet *items;
@end

@interface ANItem : NSManagedObject
{
    NSNumber *sortProperty;
}
@property (retain) NSNumber *sortProperty;
@end

Хорошо, суть в том, что UITableView имеет экземплярОбъект AGroup и отображает список элементов, и порядок, в котором элементы отображаются, определяется свойством sortProperty.

Итак, я хочу знать, когда sortProperty изменяется на экземпляре ANItem, чтобы яможно обновить вид таблицы.Мне интересно, есть ли способ использовать KVO для наблюдения sortProperty из объекта AGroup?Что-то вроде:

[group addObserver:self forKeyPath:@"items.sortProperty" options:(NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld) context:nil];

или даже:

[group addObserver:self forKeyPath:@"items.@sum.sortProperty" options:(NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld) context:nil];

будет работать, так как сумма будет меняться при изменении значения.

Я пробовал это, хотя, и я получаю ошибку неверного аргумента.

Кто-нибудь знает, возможно ли это?Если да, то как?

Я понимаю, что мог бы сделать запрос на выборку и отсортировать запрос по sortProperty, но из-за некоторых других ограничений архитектуры приложения это не совсем возможно в этом случае.По сути, это своего рода сводится к представлению, что я просто имею дело с простым старым NSSet в объектных отношениях.Я упоминаю только аспект основных данных в том случае, если это влияет на ответ из-за дополнительных ограничений / etc?

1 Ответ

1 голос
/ 17 апреля 2011

Я уверен, что нет никакого способа непосредственно наблюдать за содержимым подобной коллекции.Я думаю, что лучше всего определить определяющие KVC / KVO аксессоры / мутаторы наборов, наблюдать self.items и использовать уведомления об изменениях для непосредственного наблюдения sortProperty для каждого из объектов при их добавлении в коллекцию.

Поскольку это базовые данные, вам также может / вместо этого понадобиться использовать уведомления о сохранении контекста для обнаружения изменений в элементах.У меня недостаточно опыта работы с Core Data, чтобы сказать наверняка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...