У меня есть подкласс NSMutableArray, чтобы учесть источник данных. Это называется BaseObjectArray. Массив фактически содержит только список идентификаторов строк (как uint64_t), и при запросе objectAtIndex он запрашивает у делегата источника данных объект с этим идентификатором строки (для учета отложенных запросов к БД).
Внутренний список идентификаторов строк - это собственный класс (подкласс RowIDSet или OrderedRowIDSet, который является просто подклассом NSObject), который содержит только список уникальных идентификаторов строк.
Что мне нужно, так это каким-то образом прослушивать изменения BaseObjectArray (который фактически прослушивает изменения своего объекта RowIDSet, возможно, с помощью аналогичного метода).
Поскольку объекты могут быть добавлены / удалены из BaseObjectArray без использования стандартного addObject:, но вместо этого с addRowID: объект, которому принадлежит BaseObjectArray, вероятно, не получит стандартные уведомления KVO.
Возможные решения, которые я рассмотрел:
BaseObjectArray имеет свойства owner и ownerKey, а BaseObjectArray вызывает триггеры [owner willChangeForKey: ownerKey]; всякий раз, когда что-то меняется.
Используйте will / didChangeNotificationBlocks - слушатели могут просто добавить блок в BaseObjectArray (сохраняя эти блоки в NSMutableArray), и все блоки в этом массиве срабатывают при изменении чего-либо в BaseObjectArray. Я не уверен относительно возможного кошмара цикла сохранения, который может последовать.
KVO для свойства 'contents' объекта BaseObjectArray. Любой, кто хочет наблюдать BaseObjectArray, на самом деле наблюдает keyPath «содержимое», а внутри BOArray он вызывает [self willChangeForKeyPath: @ «contents»]. Свойство содержимого просто возвращает себя.
... что-то очевидное, что я пропустил ...
Пожалуйста, дайте мне знать, если какой-либо из них имеет наиболее (или какой-либо) смысл, или есть ли лучшее решение там.
Спасибо:)