2012-01-10 5 views
23

Я новичок в разработке iOS и разработке мобильных приложений в целом, у меня есть приличные знания о шаблонах Objective C и MVC для использования, и я никогда не делал разработку Mac.Почему NSUserDefaults используется в iOS?

Я пытаюсь понять, для чего нужен NSUserDefaults?

У нас уже есть что-то вроде PList, который хранит данные в формате XML, и у нас есть SQLite, который является легким DB для таких устройств.

Тогда почему у нас это есть?

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

Для NSUserDefaults, Apple, документы говорят, что: -

«Приложение запись таких предпочтений, присваивая значение набора параметров в базе данных по умолчанию параметров пользователя»

Что они означают базы данных по умолчанию пользователя ?

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

Как и Mac OS X, у iOS также есть несколько пользователей, и в зависимости от того, что зарегистрировано в NSUserDefaults, он выбирает свои предпочтения?

Скажите, пожалуйста, если я ошибаюсь.

+0

Отметьте это: http://jayprakashdubey.blogspot.in/2014/07/nsuserdefault-usage.html –

ответ

13

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

NSUserDefaults делает невероятно легким, так как вам не нужно беспокоиться о файлах, объектах, выборках, .... Все это делается в одной строке.

+1

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

+0

Это вопрос? напишите новый со всем соответствующим кодом, так как NSUserDefaults должен хранить информацию постоянно. – vikingosegundo

1

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

Примечание. Оно не предназначено для замены традиционного хранилища данных (основные данные, SQLite, списки свойств и т. Д. Предназначены для хранения данных приложения). То, что для NSUserDefaults предназначено для определенных пар значений ключа.

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

+0

Так NSUserDefaults представляет собой временное хранилище для сеанса приложений? как хранение сеансов в веб-приложении? –

+0

№ NSUserDefaults предназначен для постоянного хранения. Общая противоположность временной. Если вы хотите, чтобы ваши данные были там в любое время, и если они довольно маленькие, то продолжайте и сохраните их в NSUserDefaults. Предположим, вы разрабатываете игру, и ваше приложение состоит из настроек «Просмотр» для пользователя, чтобы выбрать такие параметры, как «Ник-имя», цвет, скорость и т. Д., А затем вы должны использовать NSUserDefaults для сохранения этих пользовательских настроек. Вы также можете использовать plist и sql-lite, но наилучшей практикой, предлагаемой большинством разработчиков iOS, является использование NSUserDefaults для настроек приложения. –

4

Это изначально предназначено для хранения настроек, но, похоже, для (а) используется для многих других вещей, если вопросы о SO - что-то в этом роде. «Точкой» этого является то, что он обеспечивает однострочный метод сохранения и извлечения данных для широкого диапазона типов данных.

Там нет конфигурации многопользовательского (пока?) на прошивке (вы когда-нибудь пришлись войти в свой iPhone?), Который встроен в NSUserDefaults, а потому, что OS X и IOS построены на том же Foundation, тот же класс используется для обеих операционных систем.

+0

Таким образом, роль NSUserDefaults в MacOsX заключалась в том, чтобы хранить настройки в качестве значения ключа в базе данных пользователя по умолчанию, откуда приложения могут собирать данные. Но скажите мне, что в iOS это просто хранилище ключевых значений, потому что есть только один пользователь, поэтому имя NS «Пользователь» По умолчанию как таковое не имеет значения здесь? Несомненно, он используется (ab): P Так что же это его прецедент в iOS? Извините за то, что я немного глуп, но у меня нет iphone. Я сделал много веб-разработчиков в своем граде и должен работать на iOS в своей компании. –

+0

Это должно быть выбрано как правильный ответ. Первоначальный вопрос: «Как и в Mac OS X, у iOS также есть несколько пользователей, и в зависимости от того, что зарегистрировано в NSUserDefaults, он выбирает свои предпочтения?» не был адресован из другого ответа. – user523234

3

iOS - это однопользовательская ОС. Следовательно, NSUserDefaults используется по-разному в OSX и iOS.

В iOS вы обычно используете NSUserDefaults для сохранения настроек приложения и/или данных пользователя в системе «iOS по умолчанию». Данные, сохраненные в системе по умолчанию, будут постоянно сохраняться даже при перезагрузке устройства iOS. На самом деле, даже когда пользователь обновляет приложение.

Обычно вы хотите использовать NSUserDefaults для сохранения настроек/настроек приложения. Любые другие массивные данные, такие как данные игры или вычисления в реальном времени, должны быть сохранены в CoreData или sqllite в каталоге документов.

+0

По умолчанию пользовательские настройки по умолчанию обновляются. –

+0

@AnkitJain Еще один поток предполагает, что это не так, за пределами глюков: http://stackoverflow.com/questions/1638766/do-nsuserdefaults-persist-through-an-update-to-an-app-in-the-appstore –

14

Еще одна вещь, о которой еще не упоминалось: NSUserDefaults поддерживает все базовые скалярные (float, int, BOOL) типы, а также совместимые с plist типы: NSData, NSString, NSNumber, NSDate, NSArray и NSDictionary. (Вы упомянули plists как альтернативу - NSUserDefaults - это всего лишь интерфейс для стандартного файла plist в папке Preferences приложения.) Это упрощает создание постоянного хранилища для вашего состояния приложения всего за несколько строк кода. Еще лучше, если вы реализуете NSCoding на вашей модели объектов, вы можете архивировать их в NSData и поместить их в NSUserDefaults:

NSData* data = [NSKeyedArchiver archivedDataWithRootObject:arrayOfModelObjects]; 

[[NSUserDefaults standardUserDefaults] setObject:data forKey:kDefaultsKeyModelObjects]; 

и восстановление ваших данных приложение так же просто, как

- (void)viewDidLoad 
{ 
    NSData* data = [[NSUserDefaults standardUserDefaults] objectForKey:kDefaultsKeyModelObjects]; 

    arrayOfModelObjects = [[NSKeyedUnarchiver unarchiveRootObject:data] retain]; 

    // error checking, tell UI to load the new values, etc... 
} 

(kDefaultsKeyModelObjects является строковой константой, которую вы где-то определили. Всегда ставьте свои ключи NSUserDefaults в одном месте! Наличие опечатки в ключевом имени может занять несколько часов для отладки. :)

Если вы использовали, например, SQLite для хранения данных приложения , вам нужно написать много кода для mov e ваши данные модели в и из базы данных. Это имеет смысл, если вы имеете дело с большим количеством данных, нуждаетесь в эффективном поиске и т. Д .; но если это, скажем, список серверов в сетевом приложении, проще и чище бросать их в NSUserDefaults.

Последнее: NSUserDefaults отлично подходит для прототипирования. Даже если вы знаете, что в конце концов вам понадобится магазин SQLite, вы можете начать использовать NSUserDefaults в качестве быстро и легко сохраняющегося хранилища и получить свой интерфейс и создать свою модель данных, прежде чем писать кучу кода базы данных.

Так как Mac OS X, это IOS также несколько пользователей и в зависимости от зависимости от того, регистрируется в NSUserDefaults выбирает его/ее предпочтения?

Не, на прошивке по умолчанию PLIST находится в папке/Preferences библиотеки приложения, а не в папке пользователя, как это на OS X. Я не могу себе представить, IOS будет когда-либо иметь несколько логинов, но вы никогда не знать. Если бы это было так, им пришлось бы создавать отдельные шаблоны по умолчанию для разных пользователей.

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