2013-03-19 2 views
0

App Обзор:NSDictionary и NSUserDefaults как хранилище данных?

Пользователь может выполнять тесты скорости Интернет и другие виды теста с различными результатами. Обычно результаты теста хранятся в NSArrays и NSStrings.

Цель:

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

Проблема:

У меня трудно понять, какой носитель использовать и как все это должно соответствовать вместе.

Есть ли способ назвать NSUserDefaults с использованием значения String или Integer? Например, у меня есть строка под названием «hisName» со значением «history1», можно ли было бы назвать NSUserDefaults * hisName, но вернуть ли она значение history1? Идея с каждым тестом увеличивается число шагов и новые значения по умолчанию для истории (история2, история 3 и т. Д.).

В версии для Android этого приложения это возможно. Таким образом, приложение просто создает «History-X» на лету в зависимости от максимального количества истории. Когда max достигнут, первое будет перезаписано.

UPDATE:

Попробую немного сложнее объяснить, что я клоню.

Пользователь заканчивает тест, и я храню все необходимые данные в файле NSUserDefaults/NSDictionary с именем History1.

Затем я увеличиваю значение Integer с именем HistoryCount на 2. Теперь, когда пользователь выполняет другой тест, я хочу вызвать NSUserDefaults/NSDictionary «History2», где 2 - из Integer HistoryCount. Я не могу найти способ назвать NSUserDefaults/NSDictionary с помощью NSString и т. Д.

+0

Вы можете уточнить «вернуться к истории значений1». – Rakesh

+0

не является хранилищем данных sqlite или core, более подходящим для ваших попыток выполнить! – ahmad

+0

@ Dan: Вы можете сохранить строку со значением @ "history" для ключа @ "hisName". В чем проблема?Для приращения строкового значения вам придется реализовать свою собственную логику. И для этого, зачем вам нужен словарь? – Rakesh

ответ

0

Используйте этот метод для сохранения словаря;

-(void)saveDefaults:(int)historyCount{ 
    NSDictionary *history1 = [NSDictionary dictionary]; //You already have this dictionary 
    NSString *historyKey = [NSString stringWithFormat:@"history%d",historyCount]; 
    [[NSUserDefaults standardUserDefaults] setObject:history1 forKey:historyKey]; 
} 

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

self.historyCount =1; 

[user runTest]; //first run 
[user saveDefaults:self.historyCount]; 
self.historyCount++; 


[user runTest]; 
[user saveDefaults:self.historyCount]; 
self.historyCount++; 

и так далее ..

Если вы хотите использовать несколько истории объектов словаря для одного пользователя, то вы можете сохранить группу объектов истории как (индекс используется для доступа к объектам истории) массива или может использовать словарь с ключом, например @"history1", и значение, словарь history1. Вы можете создавать новые ключи, как показано выше.

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