Форум программистов, компьютерный форум CyberForum.ru

Сохранение информации при переходе от одного контроллера к другому - Программирование iOS/iPhone

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.70
fatalis
8 / 8 / 1
Регистрация: 09.08.2013
Сообщений: 68
09.08.2013, 17:58     Сохранение информации при переходе от одного контроллера к другому #1
Есть несколько классов наследующих UIViewController(GameViewController,ShareViewController,AboutViewController)
Вопрос в том,как сохранять счет игры во время переходов между контроллерами.
Среди вариантов :сохранять score в файл(как-то криво),создать синглтон-класс и создавать глобальную переменную в AppDelegate
Есть ли какое-то более простое решение?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.08.2013, 17:58     Сохранение информации при переходе от одного контроллера к другому
Посмотрите здесь:

Objective-C Добавление информации в .plist
Сохранение Objective-C
Подвисание ViewController при переходе по UINavigationBar
Objective-C Передача информации из текстбоксов одного окна в таблицу другого окна
Сохранение данных приложения Objective-C
Файловый менеджер открытие нужного контроллера
Objective-C Сохранение ID пользователя в iCloud
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Vorona
Peace 2 all shining faces
 Аватар для Vorona
661 / 523 / 44
Регистрация: 05.03.2010
Сообщений: 1,270
09.08.2013, 21:32     Сохранение информации при переходе от одного контроллера к другому #2
Цитата Сообщение от fatalis Посмотреть сообщение
создавать глобальную переменную в AppDelegate


тут уже миллион раз поднимался этот вопрос, вариантов - уйма:
БД, плист, хмл, тхт, юзердефолтс, ...

можно даже статическим классом обойтись, если туда нужно только преедать очки, а тот просто запишет инфу куда-то
fatalis
8 / 8 / 1
Регистрация: 09.08.2013
Сообщений: 68
09.08.2013, 22:10  [ТС]     Сохранение информации при переходе от одного контроллера к другому #3
БД,плист,хмл - все это работа с файлами(вариант о котором я упомянул).Не поверите! Статический класс я тоже разглядывал,как вариант.Я просто интересуюсь(о чем я собственно написал в теме),нет ли более простого решения для этой,казалось бы,тривиальной задачи
Vorona
Peace 2 all shining faces
 Аватар для Vorona
661 / 523 / 44
Регистрация: 05.03.2010
Сообщений: 1,270
09.08.2013, 22:19     Сохранение информации при переходе от одного контроллера к другому #4
NSUserDefaults – грубо говоря – словарь на время жизни приложения, пока его не удалят
fatalis
8 / 8 / 1
Регистрация: 09.08.2013
Сообщений: 68
09.08.2013, 22:34  [ТС]     Сохранение информации при переходе от одного контроллера к другому #5
Информация мне нужна исключительно во время работы программы( но доставать ее нужно будет много раз) и я опасаюсь,что работа с файлами(тем более,со словарем) будет сильно замедлять работу приложения.Поэтому я более склоняюсь к https://ru.wikipedia.org/wiki/%D0%9E...BD%D0%B8%D1%8F) или к статическому классу.
mobidevelop
182 / 182 / 3
Регистрация: 10.01.2013
Сообщений: 596
09.08.2013, 23:21     Сохранение информации при переходе от одного контроллера к другому #6
Словарь работает очень быстро. Ключи внутри отсортированы, поэтому со скоростью проблем нет.
someAlex
0 / 0 / 0
Регистрация: 10.08.2013
Сообщений: 5
10.08.2013, 01:07     Сохранение информации при переходе от одного контроллера к другому #7
Не могу предложить новых вариантов, но пишу из интереса, почему не подходит решение с объектом-синглтоном? По-моему, он тут хорошо подойдёт. Никакой работы с файлами, гарантированный доступ из разных мест.
Vorona
Peace 2 all shining faces
 Аватар для Vorona
661 / 523 / 44
Регистрация: 05.03.2010
Сообщений: 1,270
10.08.2013, 02:15     Сохранение информации при переходе от одного контроллера к другому #8
да потому что стоит пересмотреть предоставленные средства для начала, а потом уже велосипед изобретать
есть NSUserDefaults, который просто никак лучше подходит для этой задачи, а вы сейчас синглтонов наклепаете и рады

к тому же уверен, что реализуете вы их неправильно, что может повлечь за собой утечки в памяти, проблемы с вызовом из разных потоков и замедлению работы
вообще стоит стараться поменьше синглтонов создавать, а если и создавать то следить чтобы были реализованы правильно (а в objective-c это геморнее чем где бы то ни было), ну и следить за такими вещами как synchronized, что может повлечь замедление в работе, это описано у Фримана "Head first design patterns"
someAlex
0 / 0 / 0
Регистрация: 10.08.2013
Сообщений: 5
10.08.2013, 02:25     Сохранение информации при переходе от одного контроллера к другому #9
Цитата Сообщение от Vorona Посмотреть сообщение
да потому что стоит пересмотреть предоставленные средства для начала, а потом уже велосипед изобретать
есть NSUserDefaults, который просто никак лучше подходит для этой задачи, а вы сейчас синглтонов наклепаете и рады
Вы предлагаете человеку ради оперативного доступа к внутриигровому счёту записывать его в нечто, предназначенное для сохранения пользовательской информации от запуска к запуску приложения (пусть даже его можно использовать и для других целей) и периодически синхронизирующееся с жёстким диском устройства? Я абсолютно солидарен с автором темы по поводу "я опасаюсь,что работа с файлами(тем более,со словарем) будет сильно замедлять работу приложения".
Vorona
Peace 2 all shining faces
 Аватар для Vorona
661 / 523 / 44
Регистрация: 05.03.2010
Сообщений: 1,270
10.08.2013, 04:33     Сохранение информации при переходе от одного контроллера к другому #10
Цитата Сообщение от someAlex Посмотреть сообщение
я опасаюсь,что работа с файлами(тем более,со словарем) будет сильно замедлять работу приложения
пффф, серьезно? чем обосновывается предположение, что работа со словарем будет замедлять работу приложения?
перешли на другой контроллер, сохранили данные и прочитали, все.

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

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

словарь, это хеш таблица, работает неимоверно быстро

не говорите ерунды, 21 век на дворе, мы же не светофоры программируем

p.s. тем более, что предложение действительно простейшее, а обращение к синглтону, у которого доступ к sharedInstance обернут в synchronize, это быстрее по вашему?
да и вообще, старайтесь поменьше этих синглтонов юзать, когда можно обойтись хорошими удобными и быстрыми предоставленными средствами

Objective-C
1
2
[[NSUserDefaults standardUserDefaults] setObject:@193 forKey:@"scores"];
NSNumber *scores = [[NSUserDefaults standardUserDefaults] objectForKey:@"scores"];
просто нереально медленно и сложно . . .
noname_club
 Аватар для noname_club
102 / 90 / 9
Регистрация: 01.05.2013
Сообщений: 577
10.08.2013, 11:21     Сохранение информации при переходе от одного контроллера к другому #11
ну и следить за такими вещами как synchronized
я вообще почти их не использую

достаточно вызвать знак подчеркивания чтобы получить значение свойства, что я делаю не так? ))

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

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

Согласитесь что операции с такими данными как числа, синтаксически затруднительна в Obj-C

p.s. тем более, что предложение действительно простейшее, а обращение к синглтону, у которого доступ к sharedInstance обернут в synchronize, это быстрее по вашему?
да и вообще, старайтесь поменьше этих синглтонов юзать, когда можно обойтись хорошими удобными и быстрыми предоставленными средствами
[NSUserDefaults standardUserDefaults] setObject:@193 forKey:@"scores"];
NSNumber *scores = [[NSUserDefaults standardUserDefaults] objectForKey:@"scores"];
[NSUserDefaults standardUserDefaults] чтоже является сингтоном, причем не менее медленным.

в данном случае синглтон может быть выступать ввиде обертки как NSUserDefaults, и содержать метод save

который как и syncronize можно вызывать в любое время в любом месте кода

пример кода тогоже кода с синглотоном

Objective-C
1
2
3
4
5
6
7
8
9
#define Singleton [MySingleton getInstance]
 
...
 
Singleton.scores = 193;
 
// если надо сохранить
 
[Singleton save];
mobidevelop
182 / 182 / 3
Регистрация: 10.01.2013
Сообщений: 596
10.08.2013, 11:57     Сохранение информации при переходе от одного контроллера к другому #12
Из примитивного вопроса такую бучу раздули - журналюги обзавидуются, если въедут в чем тут дело.
Voron'у с толку сбили, noname_club очередных глупостей налепил, слов умных наговорили не поделу. Движуха! Аж дух захватывает.
fatalis, смело используйте Singleton, ему тут самое место. Особенно, если у вас одно игровое поле. В вашем случае сложно что-нибудь им сломать. Хотя, при известной сноровке...
zulkis
 Аватар для zulkis
681 / 608 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
10.08.2013, 12:27     Сохранение информации при переходе от одного контроллера к другому #13
Эммм, noname_club, спасибо за новый взрыв моего мозга.
Сразу так хорошо стало
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.08.2013, 15:32     Сохранение информации при переходе от одного контроллера к другому
Еще ссылки по теме:

Как сохранить данные при переходе на другой ViewController?
Objective-C Сохранение и считывание переменной
Сохранение очков, куда? Objective-C
Objective-C Открытие второго контроллера после удачного POST запроса
Обновление одного контроллера другим

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
fatalis
8 / 8 / 1
Регистрация: 09.08.2013
Сообщений: 68
11.08.2013, 15:32  [ТС]     Сохранение информации при переходе от одного контроллера к другому #14
Реализовал синглтон,всем спасибо за советы.
Если нужно скинуть пример реализации(хотя их и так премного) - обращайтесь
Yandex
Объявления
11.08.2013, 15:32     Сохранение информации при переходе от одного контроллера к другому
Ответ Создать тему
Опции темы

Текущее время: 15:36. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru