Код iPhone для создания новых объектов NSUserDefaults? - PullRequest
1 голос
/ 12 мая 2010

У меня есть NSUserDefaults, в котором хранится ряд строковых переменных для таких вещей, как имя, дата рождения, адрес и т. Д. Я хотел бы знать, как написать код, который будет создавать новый объект для каждого нового пользователя. Например, у меня есть вращающееся колесо, которое появляется сразу после первого запуска приложения пользователем. Я хочу, чтобы у этого колеса была одна опция - «Новый пользователь». Как только этот новый пользователь заполняет кучу текстовых полей, которые я использую для сохранения с помощью NSUserDefaults, я хочу, чтобы этот пользователь был сохранен на этом вращающемся колесе, чтобы в следующий раз, когда они открывали приложение, у него была возможность вернуться ко всем переменные, которые они ранее вставили, или создание нового пользователя, чтобы они могли вводить все новые переменные.

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

NSUserDefaults *userData = [NSUserDefaults standardUserDefaults];
[userData setObject:txtName.text forKey:@"name"];

--- РЕДАКТИРОВАТЬ ДЛЯ УТОЧНЕНИЯ ---- Я уже могу поместить несколько строк в этот объект 'userData', просто добавив больше строк, например, 2-ю строку сверху. Что я хочу знать, так это как добавить user2Data, user3Data, user4Data, usernData .......... чтобы создать потенциально неограниченное количество пользовательских объектов для хранения этих переменных?

Ответы [ 3 ]

0 голосов
/ 12 мая 2010

Вы можете добавить NSArray объекты к NSUserDefaults.

NSUserDefaults *userData = [NSUserDefaults standardUserDefaults];
NSMutableArray *users = [NSMutableArray mutableArrayWithArray:[userData objectForKey:@"users"];

[users addObject:txtName.text];

[userData setObject:[NSArray arrayWithArray:users] forKey:@"name"];

[userData setObject:txtName.text forKey:@"name"];

Если вам нужно более одной строки для пользовательских данных, вы можете посмотреть на использование объекта NSDictionary.

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

0 голосов
/ 12 мая 2010

Что вы, вероятно, хотите сделать, это создать список свойств для каждого пользователя и сохранить список пользователей в ваших NSUserDefaults. Как только пользователь был выбран, вы можете загрузить содержимое списка свойств для этого конкретного пользователя и загрузить / сохранить все данные в этом конкретном списке свойств. Основой этого подхода является использование NSDictionary * везде, где вам нужно читать из списка свойств, и NSMutableDictionary *, когда вам нужно как читать, так и писать в него. Когда вы впервые создаете список свойств, вы просто создаете экземпляр NSMutableDictionary. Если вы хотите сохранить или загрузить его, вы можете использовать класс NSPropertyListSerialization , чтобы сохранить или загрузить словарь из / в список свойств.

0 голосов
/ 12 мая 2010

Вы можете изменить следующее в соответствии с вашими потребностями для добавления в ваш делегат приложения:

+ (void) initialize 
{
    if ([self class] == [MyAppDelegate class]) {        
        // initialize user defaults dictionary
        BOOL isFirstTimeRun = YES;
        ...

        NSMutableDictionary *resourceDict = [NSMutableDictionary dictionary];
        [resourceDict setObject:[NSNumber numberWithBool:isFirstTimeRun] forKey:kIsFirstTimeRunKey];
        ...

        [[NSUserDefaults standardUserDefaults] registerDefaults:resourceDict];
    }
}

...

- (void) applicationDidFinishLaunching:(UIApplication *)application 
{
    if ([[[NSUserDefaults standardUserDefaults] objectForKey:kIsFirstTimeRunKey] boolValue]) {
        // you could do first-time-run stuff here, such as initializing 
        // other data model elements...
    }
    ...
}

...

- (void) applicationWillTerminate:(UIApplication *)application 
{
    //  if we're quitting the app, it must have been run at least once
    if ([[[NSUserDefaults standardUserDefaults] objectForKey:kIsFirstTimeRunKey] boolValue])
        [[NSUserDefaults standardUserDefaults] setObject:[NSNumber numberWithBool:NO] forKey:kIsFirstTimeRunKey];
    ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...