2014-02-14 6 views
3

Я изучаю наиболее эффективный и безопасный способ обработки данных в приложении iOS.Доступ к данным iOS по всему окну

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

Данные моих приложений хранятся в plist с контроллером (DataManager), обрабатывающим преобразование из файла plist в переменные, хранящиеся в классе DataManager.

Какие еще существуют опции для доступа к данным для моего контроллера просмотра, последующих сцен (я использую SKSpriteKit) и делегата приложения? Как было установлено, чтобы сделать DataManager одиночным или создать несколько экземпляров DataManager по всей программе.

Я думал о передаче данных между сценами при нажатии и вытягивании, но будет ли это причиной высокого уровня сцепления?

С уважением Byron

+0

Какие данные вы пытаетесь обработать? Насколько она велика? – Dumoko

+0

хорошо .. все данные игры: валюта, уровень, счет, таймер. Я просто хочу иметь доступ к нему в разных точках всей программы. – Byron

ответ

1
  • Передача данных туда и обратно между ViewControllers - это понятие, которое можно сказать, что, безусловно, не так. - это не MVC

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

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

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

Таким образом, используя класс может выглядеть

[ProgressManager sharedInstance].level = level; 

Это вы будете придерживаться MVC шаблон, который является ключевым. VC должен получить доступ к моделям, взять данные из них и рассказать, что именно показывать.

Не знаю, для чего вы используете таймер, но если это для некоторых глобальных целей (а не только времени с момента последнего перехода персонажа), было бы неплохо иметь отдельный класс, который обрабатывал бы эти глобальные таймеры ,

В противном случае таймер был бы хорош, чтобы сохранить инкапсуляцию в пространстве, которое работает с ним.

+1

Спасибо Dumoko за такой ясный и лаконичный ответ, его очень ценят. После дальнейших исследований в этом, я гораздо лучше понимаю одиночки. Я реализовал singleton для доступа к данным из модели и сделать ее доступной в виде переменных. Я также использовал переменные, такие как «таймер», и инкапсулировал его в игровой сюжет. – Byron

Смежные вопросы