Дизайн iPhone: несколько таблиц в одном источнике данных - PullRequest
1 голос
/ 05 апреля 2011

У меня есть приложение, которое работает, но я не рад, что у меня есть лучшее (или самое простое) решение на месте.Приложение имеет единую базу данных с несколькими таблицами с типичными ссылками «один ко многим».Пока все хорошо и ничего необычного.

Приложение имеет 3 вкладки, каждая из которых может отображать список записей из одной из таблиц.Если пользователь касается строки таблицы, представление навигации на вкладке затем выдвигает новое представление таблицы, отображающее подробности.Подумайте о вашей адресной книге, и вы поймете идею.

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

Сложный бит при редактировании записи, поскольку он может повлиять на данные, отображаемые на другой вкладке.Первоначально я изучал выполнение обновлений табличных представлений на основе изменений основных данных, отправленных с помощью уведомлений о сохраненных основных данных.Однако я обнаружил, что разработка того, какие изменения необходимо внести в табличное представление на основе этого, была слишком сложной и ненадежной.главным образом потому, что у меня нет графика данных до и после сравнения.Так что в настоящее время, когда происходит сохранение основных данных, табличные представления просто помнят, что их резервные данные могли быть затронуты, и они выполняют полную перезагрузку при следующем отображении.

Хотя моя система работает для синхронизации данных между представлениями таблиц, я уверен, что должен быть лучший способ.Я рассматриваю вопрос о том, может ли KVO быть лучшим вариантом с контроллерами табличного представления, отслеживающими отдельные поля и объекты в графе данных, чтобы они могли реагировать на точные изменения, вызванные другими табличными представлениями.Подход с использованием уведомлений о базовых данных напоминает «молотковый» подход к проблеме, требующей тонкого касания.

Как другие справились с такой проблемой?

1 Ответ

2 голосов
/ 06 апреля 2011

Ваша путаница вызвана тем, что вы пытаетесь представить базовые данные в терминах SQL / Relational-DB.

Базовые данные не являются SQL.Сущности не являются таблицами.Объекты не являются строками.Столбцы не являются атрибутами.Базовые данные - это система управления графом объектов, которая может сохранять или не сохранять объектный граф, а может и не использовать SQL для этого далеко за кулисами.Попытка представить Core Data в терминах SQL приведет к тому, что вы полностью неправильно поймете Core Data и приведете к большим трудностям и потерянному времени.

Решение вашей проблемы простое: все вкладки используют один и тот же managedObjectContext.Если каждое табличное представление заполнено NSFetchedResultsController, FRC должен автоматически обновить табличное представление каждой вкладки с изменениями, сделанными в представлениях других вкладок, потому что FRC автоматически получает уведомления managedObjectContext.

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

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

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