TL; DR. Для упрощения всего описания, как реализовать интерфейс пользовательских интерфейсов представления не зависящих от вида таблицы, когда свойства базового объекта данных часто обновляются в фоновом режиме. И с этим визуальное представление данных необходимо немедленно обновить. [В Tableview очень легко обрабатывать, использовать КОПЫ и просто перезагрузить строку, когда обновление объекта, с помощью методов FRCS делегата.]Как сделать плотную связь между данными о корреляциях coredata/NSManagedObject с пользовательским интерфейсом приложений?
Я знаю о NSFetchedResultsController
и отображение через что пользовательский интерфейс. Но это только тогда, когда интерфейс пользователя основан на списке.
В моем случае несколько аппаратных средств подобного типа подключены к моему приложению через bluetooth (BLE), и каждый обычно обеспечивает обновления частотой 1 секунду в целом. Например, температура, заряд меняется.
Так вот пример потока пользовательского интерфейса,
Список -> Подробнее
Подробности
- Здоровье
- Активность
- Notification Установка
Подробнее просто представляет собой связанные с оборудованием данные (серийный номер, версию прошивки, дату производства и т. д.), и он имеет 3 кнопки, названные выше, которые при нажатии на нажатия на соответствующие контроллеры.
Модель Entity также разработана соответствующим образом, вот проблеск, у меня есть первичная сущность, допустим, ABC
. Затем ABC
имеет взаимно-однозначное отношение с другими объектами, такими как HealthDetails
, Activity
, NotificationSetting
и HardwareDetails
. ABC
имеет несколько атрибутов, таких как identifier
, connected
, name
и т.д.
ListViewController
является UITableViewController
и, следовательно, я использую NSFetchedResultsController
. Теперь оставшиеся все остальные контроллеры представлений - это просто обычные контроллеры представлений, а только титры Title, такие как «последняя заряженная дата», которая является статичной и «меткой описания» ниже, которая показывает данные. Другие контроллеры вида также заполнены просто кнопками, надписями и т. Д.
Обновление контроллера списка с помощью кнопки NSFetchedResultsController
.
[Когда строка/клетка касании пользователя, я просто получить объект, используя indexpath из FRC и ввожу его в контроллер вида назначения.]
Однако другие контроллеры вида не представление таблицы на основе. Поэтому я использую уведомление для управления другими обновлениями UI контроллера.
Для примера, когда мой BluetoothManager
получает обновление от оборудования, относящегося к признаку, я перенаправляю идентификатор и данные в свой DatabaseHelper
, который затем декодирует данные и вставляет их в соответствующий управляемый объект, и в этот момент я просто сгенерировать уведомление с идентификатором объекта, который был обновлен.
Все UIViewController
s в иерархии, находящиеся в стеке навигации, подписываются как наблюдатели. И если идентификатор в уведомлении соответствует объекту объекта, отображаемому в настоящее время, я обновляю пользовательский интерфейс. В настоящее время все это прекрасно работает.
Но, я чувствую, что это очень неуклюжий, обрабатывая множество уведомлений. Является ли это единственным способом или существуют ли более эффективные методы, существующие там, чтобы тесно связать отдельные модели данных ядра с пользовательскими интерфейсами?
Я вижу несколько замечаний, которые предлагает обрабатывать все только через КОП, но я не уверен, если FRC может использоваться в представлении пользовательского интерфейса на основе не TableView. Я искал и не нашел много. Если кто-либо знает какой-либо учебник/блог с даже теоретическим описанием, это будет большой помощью.
Другое дело, что предложения по FRC для обработки всех, я не получил его полностью, мне нужно разместить один контроллер FRC для каждого контроллера? Разве нет другого пути?
FRC не только для интерфейсов на основе списков, вы рассмотрели, как его можно использовать для других экранов? Вы действительно не объяснили свою модель данных или ваши экраны и почему вы думаете, что FRC не подходит ... – Wain
@Wain Здравствуйте, wain, я был слишком занят, чтобы написать более подробный вопрос. Ничего больше. Однако я просто дал несколько дополнительных моментов в том, как я обрабатываю структуру. Можете ли вы заглянуть в нее и ответить, если у вас есть лучшее решение? Дайте мне знать, если этого еще недостаточно. –