2013-05-02 2 views
0

У меня есть объект, который можно выбрать щелчком пользователя. В соответствии с текущими требованиями приложения, в любой момент, в любой момент во время выполнения приложения не более одного из этих элементов.Отправка NSNotifications всем объектам класса

я реализовал механизм для обеспечения соблюдения этого, следующим образом:

  • Каждый из этих объектов имеет уникальный идентификатор в качестве свойства.
  • Когда каждый объект создан, он подписывается на NSNotificationCenter, слушая уведомление MY_OBJECT_SELECTED.
  • Когда каждый объект выбран, он отправляет уведомление MY_OBJECT_SELECTED с его уникальным идентификатором как частью словаря userInfo.
  • Затем, когда каждый объект получает уведомление, он проверяет, совпадает ли его идентификатор с идентификатором пользователя. Если это так, он ничего не делает, но если это не так, он отменяет выбор.

Это достойный подход к проблеме? Если нет, как бы вы это сделали?

ответ

1

Это достойный способ сделать это, хотя он не очень эффективен. Чем больше объектов у вас есть, тем больше времени вы тратите на сравнение идентификаторов. Самый простой способ - сохранить указатели и идентификаторы объектов в таблице карт (или аналогичных) и запомнить последний выбранный объект. Всякий раз, когда вы выбираете новый объект, вы очищаете флаг выбора последнего выбранного объекта, затем просматриваете новый объект и устанавливаете его флаг выбора. Тем не менее, это требует, чтобы вы сохранили коллекцию своих объектов.

Время, необходимое для обновления выбора с помощью этого подхода, не зависит от количества объектов, которые у вас есть.

+0

На данный момент я сохраняю свой текущий код, так как он довольно прост по коду, но, как вы сказали, он не будет масштабироваться для размера, если число велико. Достаточно легко сделать изменение, если оно мне понадобится. – Liron

0

Если объект распространяется по всему приложению, то есть. если он является членом в разных классах. Вы можете иметь глобальный объект того же типа и назначать его только тому объекту, который был затронут. На этапах это будет выглядеть так:

  • Имейте глобальную переменную типа объекта.
  • При любом касании объекта назначьте globalObject = currentObject;
  • делать все операции над globalObject по всему приложению, такие как методы вызова и модификация членов объекта (для обеспечения безопасности требуется проверка на отсутствие).
  • Перенесите на другой объект с новым прикосновением.

 Смежные вопросы

  • Нет связанных вопросов^_^