iOS: как создать функцию предпочтений пользователя

У меня есть приложение, основанное на UINavigationController; Я хочу добавить страницу «Настройки», где пользователь сможет установить некоторые функции, такие как язык и некоторые другие настройки. В настоящее время UIViewController, в котором я хочу иметь поля настроек, находится на 2 уровнях под RootViewController (т.е. есть «основной вид» >> вы нажимаете кнопку и вводите другой UIViewController и формируете там, вы должны иметь возможность войти в Setting UIViewController ).

Я не понимаю, как я должен сохранять эти данные и как вызывать их при загрузке приложения.

Я читал несколько блогов о NSUserDefaults и о Singleton, но не понимаю, как их использовать.

Где я должен создать атрибуты данных, которые впоследствии будут поддерживать пользовательские настройки? Должен ли я создавать их в AppDelegate или в MySettingsViewController (UIViewController, который я создаю)?

Должен ли я использовать атрибут Singleton, и если да, то где его создать?

Когда вы говорите «Singleton», вы на самом деле имеете в виду создание статического атрибута?

Есть ли другой способ связи между двумя контроллерами, которые не связаны напрямую друг с другом (я могу передавать данные из «нижнего» ViewController в RootViewController, передавая их через UIViewController посередине, но это кажется странным и неэффективным)?

Любое направление / учебник будет оценено!


person Ohad Regev    schedule 01.08.2011    source источник


Ответы (2)


Обязательно используйте NSUserDefaults. Это здорово, и Apple рекомендует это.

Чтобы установить настройку:

[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"Setting 1"];

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

Чтобы проверить настройку:

if ([[NSUserDefaults standardUserDefaults] boolForKey:@"Setting 1"]) {
    //ok, do the thing here
}
person Jack Humphries    schedule 01.08.2011
comment
InAppSettingsKit использует NSDefaults за кулисами. Зачем изобретать велосипед? - person coneybeare; 01.08.2011
comment
Я не видел другого комментария, но вместо того, чтобы скачать комплект, это всего две строки, если вы хотите сделать что-то одно. А NSUserDefaults можно использовать не только для настроек, но и для многих других целей. Например, запоминание покупки в приложении. - person Jack Humphries; 02.08.2011
comment
Джек, как именно я должен использовать то, что ты предложил? У меня есть несколько вопросов по этому поводу: - person Ohad Regev; 02.08.2011
comment
1. нужно ли #импортировать какие-либо заголовки для этого? - person Ohad Regev; 02.08.2011
comment
2. Если я сохраню пользовательские настройки в UIViewController номер 3 в стеке, могу ли я просто вызвать его из 1-го UIViewController или мне нужно каким-то образом передать данные (например, иметь одноэлементный объект или передать его через метод popViewController). назад через сложенные UIViewControllers)? - person Ohad Regev; 02.08.2011
comment
Хорошо, я попробовал и понял, как сохранять и извлекать данные. Спасибо за это!!! Теперь я не понимаю, как обновлять данные в других UIViewController, которые должны быть затронуты. Вы можете взглянуть на другой вопрос, который я разместил? stackoverflow.com/questions/6912706/ - person Ohad Regev; 02.08.2011
comment
[userDefauls синхронизируется]; - person melanke; 11.12.2013

Я бы использовал http://inappsettingskit.com/, а не создавал свой собственный. Я использовал его почти во всех приложениях, над которыми работаю, и он идеально обрабатывает настройки приложений именно для такого рода сценариев.

person Roger    schedule 01.08.2011
comment
Спасибо за ссылку! Я обязательно проверю. - person Ohad Regev; 02.08.2011
comment
Замечательная рекомендация. - person Alex Zavatone; 13.02.2014