Наблюдение значения ключа к - многие отношения в Какао

Если вам просто не нужен цикл, проверьте наличие клика на странице, а затем посмотрите на цель события (вещь, по которой щелкнули):

document.addEventListener("click", function(e) {
  if (e.target.tagName == "DIV") {
    e.target.style.fontSize = "20px";
  }
})
<div>test</div>
<div>test</div>
<div>test</div>

8
задан Slipp D. Thompson 5 September 2015 в 20:21
поделиться

3 ответа

Необходимо реализовать средства доступа индексного массива, как определено в руководстве по программированию KVC. Затем необходимо использовать те средства доступа для доступа к массиву, и инициирование KVO будет работать. Можно также назвать-mutableArrayValueForKey: и используйте тот массив для addObject: и такой и это в свою очередь назовет методы доступа, и инициирование KVO произойдет также. Существуют также средства доступа набора для использования в для NSSets, видят здесь и здесь.

Пример:

@interface MyClass : NSObject
{
    NSMutableArray *_orders;
}

@property(retain) NSMutableArray *orders;

- (NSUInteger)countOfOrders;
- (id)objectInOrdersAtIndex:(NSUInteger)index;
- (void)insertObject:(id)obj inOrdersAtIndex:(NSUInteger)index;
- (void)removeObjectFromOrdersAtIndex:(NSUInteger)index;
- (void)replaceObjectInOrdersAtIndex:(NSUInteger)index withObject:(id)obj;


@end
12
ответ дан 5 December 2019 в 08:54
поделиться

К сожалению, классы NSArray являются примечанием совместимый KVO. Они KVC совместимый, но Вы не можете наблюдать их непосредственно как, Вы пытаетесь сделать здесь. Самый легкий способ получить эту функциональность состоял бы в том, чтобы использовать NSArrayController. Контроллер NSArray KVO совместимый и предупредит Вас, когда объекты добавлены или удалены. В Вашем примере был бы уведомлен Ваш наблюдатель, если бы Вы на самом деле изменили сам массив. Например, если Вы сделали что-то вроде этого:

[moe setSomeArray:[NSMutableArray array]];

Который является, вероятно, не, что Вы хотели вообще :) Так же, как в стороне, NSDictionary является на самом деле KVO, совместимый, таким образом, Вы могли использовать это, если бы Вы выбрали. Или Вы могли записать подкласс обертки NSMutableArray, который просто создает реальный изменяемый массив как его запоминающее устройство, но просто вперед на всех сообщениях к нему кроме addObject и removeObject который Вы могли переопределить для инициирования уведомлений.

4
ответ дан 5 December 2019 в 08:54
поделиться

Почему Вы передаете свой частный массив другому объекту? Это не таким образом частное, когда Вы позволяете другим объектам обработать его.

Как сказанная s-ошибка, необходимо реализовать средства доступа и использование mutableArrayValueForKey: видоизменять свойство. Я добавляю, что Вы не должны выставлять тот частный массив вообще — Ваш someArray метод должен возвратить неизменную копию массива.

Кроме того, я называю Ваше внимание к комментарию Jason Coco к ответу s-ошибки. Для перефразирования его необходимо, вероятно, использовать NSArrayController как дополнительный шаг разделения между myObservee и myObserver. Это - очень хорошее предложение, и если у Вас нет определенной причины непосредственно наблюдать свойство, необходимо взять его. (Среди преимуществ то, что можно затем использовать Привязку для соединения представлений с новым контроллером массива.)

3
ответ дан 5 December 2019 в 08:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: