Где вы помещаете глобальные данные приложения в приложение для iPhone? - PullRequest
6 голосов
/ 05 февраля 2009

У меня есть приложение, которое позволяет пользователю просматривать, управлять и управлять коллекцией объектов Schedule. Разным частям приложения необходим доступ к этим данным. Я экспериментировал с тем, чтобы сделать коллекцию синглтоном, но я не нашел это очень чистым.

Я недавно перешел на хранение глобальных данных в классе AppDelegate и использовал:

MyAppDelegate *delegate = [[UIApplication sharedApplication] delegate];
[delegate.myGlobalData doSomething];

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

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

Ответы [ 2 ]

6 голосов
/ 05 февраля 2009

Если у вас есть централизованная модель данных, которая должна быть доступна для нескольких контроллеров, нет ничего плохого в использовании единого элемента управления данными - «sharedManager» - это именно то, что требует сценарий. По сути, это то, что Apple делает с API своей адресной книги для управления контактами. Они используют API в стиле C, но для этого необходимо получить ссылку на базу данных общей адресной книги, а затем использовать ее в будущих вызовах.

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

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

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

4 голосов
/ 05 февраля 2009

Многие люди хранят все в AppDelegate и получают доступ к данным через [[UIApplication sharedApplication] делегат].

Если данные должны сохраняться, вы также можете использовать синглтон NSUserDefaults.

Если данные большие, возможно, вам нужен SQLite.

Это для "глобальных" данных, как вы просили.

Если ваши контроллеры представления организованы в виде дерева, лучшим способом будет передача необходимых данных из родительского UIViewController в дочерний UIViewController.

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