Сохранить данные сессии в iPhone - PullRequest
2 голосов
/ 30 марта 2011

Я хочу хранить данные в разных точках моего приложения, которые доступны для объектов по всему приложению. Нечто похожее на сессию в php или глобальные переменные. Я знаю, что могу использовать NSUserDefaults, но я не уверен, как я буду продолжать добавлять значения к нему, а затем доступ к нему. Например, сначала я хочу сохранить имя пользователя, которое используется при входе в систему, затем на третьем экране я хочу сохранить компанию того пользователя, которого он выбирает из списка компаний. Затем на 5-м экране я хочу сохранить местоположение, выбранное пользователем. И тогда у меня есть различные функции, которые пользователь может использовать в зависимости от его выбора. Поскольку я новичок, прошу прощения, если это глупый вопрос, но кто-нибудь может мне помочь, как я буду хранить и извлекать множественные данные, которые доступны во всем приложении.

Ответы [ 3 ]

5 голосов
/ 30 марта 2011

На устройствах iOS у вас есть различные варианты хранения данных.Вот некоторые из них, которые вы можете рассмотреть:

  1. Базовые данные и репозиторий данных SQL или репозиторий XML.Это в основном библиотека базы данных устройств Apple, доступная для всех приложений.Это не самый простой вариант, но он позволит вам хранить довольно большие объемы разнообразных данных, которые будут доступны в коде вашего приложения.Кроме того, данные сохраняются между запусками приложения до тех пор, пока вы сохраняете их в постоянном хранилище данных до закрытия приложения.

  2. Списки свойств.Списки свойств более легки, чем Базовые данные, и вам может быть проще их использовать.Они позволяют хранить и извлекать основные пары ключ-значение в файл списка постоянных свойств.Таким образом, вы также получаете преимущество сохранения данных между запусками приложения, если вы сохраняете свои данные в файле списка свойств до его закрытия.

  3. Сохранение данных в текстовых файлах.Я не уверен, имеет ли это какое-либо преимущество перед списками свойств.

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

  5. Одноэлементные объекты в памяти.Это может быть вариант, но, конечно, после закрытия приложения все данные исчезают, если они не сохраняются в постоянном хранилище данных.

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

2 голосов
/ 01 апреля 2011

Вы просили меня в своем комментарии предоставить фрагмент кода в списках свойств.Конечно.Нет проблем.Первое, что вам нужно сделать, это создать файл со списком свойств.Просто добавьте файл со списком свойств типа в ваш проект.Давайте назовем это DataPoints.plist.Для целей этого примера файл будет содержать записи значения ключа типа NSString.В примере кода я просто извлекаю записи из списка свойств и загружаю массив.Теперь вы можете делать все что угодно с массивом.Используйте его для загрузки табличного представления или чего-либо еще.Надеюсь это поможет.Если да, пожалуйста, пометьте его как принятый ответ.Спасибо!

NSString *errorDesc;
NSPropertyListFormat format;
NSString *plistPath = [[NSBundle mainBundle] pathForResource:@"DataPoints" ofType:@"plist"];

NSData *plistXML = [[NSFileManager defaultManager] contentsAtPath:plistPath];

NSDictionary *temp = (NSDictionary *)[NSPropertyListSerialization
                                     propertyListFromData:plistXML
                             mutabilityOption:NSPropertyListMutableContainersAndLeaves
                             format:&format
                             errorDescription:&errorDesc];

if (!temp) {
     // Handle Error
     Log(@"Error reading plist: %@, format: %d", errorDesc, format);
}

NSArray *dataPoints = [NSArray arrayWithArray:[temp objectForKey:@"DataPoints"]];
0 голосов
/ 30 марта 2011

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

...