2009-02-05 2 views
6

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

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

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

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

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

ответ

6

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

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

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

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

+0

Если у вас есть соблазн уменьшить это (как кто-то только сделал), пожалуйста, посмотрите дату, когда она была написана. В то время iPhone OS 2.2 (не iOS) был текущим, а Core Data недоступны на iPhone. –

4

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

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

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

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

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