iPhone代码创建新的NSUserDefaults对象?

时间:2010-05-12 00:44:44

标签: iphone nsuserdefaults

我有NSUserDefaults存储一些字符串变量,比如姓名,出生日期,地址等。我想知道的是如何编写一个代码,为每个新用户创建一个新对象。例如,我有一个旋转轮,在用户第一次运行应用程序后立即显示。我想要的是,那个轮子有一个选项 - “新用户”。一旦新用户填写了我正在使用NSUserDefaults保存的一堆文本字段,我希望该用户保存在该旋转轮上,以便下次他们打开应用程序时,他们可以选择返回所有他们之前放入的变量,或创建新用户,以便他们可以输入所有新变量。

除了编写代码以自动创建新用户外,我知道如何做所有事情。潜在地,程序应该允许无限数量的这些用户对象,然后只使用像他们的姓氏一样的任意东西输入到旋转轮中。我假设代码需要放在以下用于保存NSUserDefaults的代码中的某处:

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

---编辑澄清---- 我可以通过简单地添加更多行(如上面的第2行)将多个字符串放入此'userData'对象中。我想知道的是如何添加'user2Data','user3Data','user4Data','usernData'..........以创建可能无限量的用户对象来存储这些变量?

3 个答案:

答案 0 :(得分:0)

您可以修改以下内容以满足您的需求,并将其添加到您的应用代理中:

+ (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];
    ...
}

答案 1 :(得分:0)

您可以将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对象。

所有这一切,如果您要存储 lot 数据,您应该查看可能在您的应用程序库目录中保存.plist文件。

答案 2 :(得分:0)

您可能想要为每个用户创建一个property list,并在NSUserDefaults中保存用户列表。选择用户后,您可以加载该特定用户的属性列表的内容,并加载/存储该特定属性列表中的所有数据。这种方法的基础是使用NSDictionary *,无论何时需要读取和写入属性列表,都可以使用NSDictionary *和NSMutableDictionary *。首次构造属性列表时,只需实例化NSMutableDictionary即可。如果要保存或加载它,可以使用NSPropertyListSerialization类从属性列表中保存或加载字典。