2009-11-19 6 views
1

Изучал, как отправлять данные из одного дочернего представления в другой вид ребенка. Приложение имеет несколько представлений, в которых вы видите вид настроек в реальном времени. Изменения в настройках должны влиять на материал внутри других представлений.Обмен данными между двумя дочерними представлениями iPhone

NSUserDefaults, кажется, популярен, но мне не нужны постоянные данные и автоматическое сохранение в базу данных/файл. Похож на потенциальное замедление, которого я хочу избежать.

Вторая популярная вещь передаёт ссылку на некоторый общий объект верхнего уровня в каждый дочерний вид. Просто не нашел ни одного учебника, в котором я бы подробно рассказал мне, как это сделать ... Скорее всего, так просто, нет учебника - после того, как вы его разобрали! Пойми, если вы можете указать мне в правильном направлении (URL)!

Вопрос: Я думаю об использовании одного «одноточечного объекта» для хранения «глобальных данных», чтобы получить доступ к нему со всего мира в любое время. Что может с этим поделать? Если я создам его, например, appDelegate.m, он должен существовать до того, как кто-либо попытается получить к нему доступ, верно?

Я смотрю this Пример кода.

ответ

1

Я бы рекомендовал использовать делегатов и/или уведомления.

Вместо того, чтобы создавать новый синглтон в делетете приложения, добавьте в делегат приложения необходимые данные (или, что еще лучше, ссылки на данные), и у них есть ссылки на делегат приложения.

Вы также можете настроить notifications, чтобы ваши представления могли отслеживать изменения данных, которые они отображают.

+0

Уведомления о замененных данных выглядят полезными, thanx! Будут использовать их в какой-то момент, знакомы с другими средами. Делегаты, с другой стороны, кажутся рекомендованными в iPhone, но пока не нашли хорошего учебника (с образцом кода). Мне еще нужно упаковать данные внутри собственного класса и/или добавить в appDelegate. Объект Singleton, похоже, дает тот же результат с меньшим количеством кода, меньше шансов на ошибки. – JOM

+0

Я действительно не вижу большой разницы с точки зрения кода или шансов на ошибки. Я бы сказал, что почти любой учебник или образец кода использует делегатов (просто посмотрите список протоколов за объявлением @interface делегата приложения и/или контроллеры представлений). – gerry3

0

Красота синглтона заключается в том, что он автоматически создается при первом доступе к нему через некоторый [singletonClass sharedInstance]. Поэтому вам не нужно «создавать» его при запуске. Если это глобальные данные, к которым нужно получить доступ, из любого вида singleton может быть правильным способом сделать это.

+0

Знаете ли вы, или кто-либо еще, другой способ сделать это? Я имею в виду, что синглтон довольно рад и все, но разве это единственный способ справиться с этой ситуацией? –

+0

Почему этот рад? Если вам нужно, чтобы синглтон существовал в памяти один раз в течение всего приложения? вы можете удалить его, когда приложение закрывается. – FelixLam