Objective c 为什么';使用my dictionary对象时是否使用默认设置?

Objective c 为什么';使用my dictionary对象时是否使用默认设置?,objective-c,Objective C,我为一个虚构的用户创建了一个存储用户名和密码的对象,然后将该对象放入字典中。现在我尝试使用NSUserDefault存储字典,但它不允许我使用。我知道最好不要使用NSUserDefault来存储用户数据,但这只是我试图学习的初学者的东西 /**interface file **/ #import "newUser.h" @interface BWViewController : UIViewController { IBOutlet UITextField *userNameFiel

我为一个虚构的用户创建了一个存储用户名和密码的对象,然后将该对象放入字典中。现在我尝试使用NSUserDefault存储字典,但它不允许我使用。我知道最好不要使用NSUserDefault来存储用户数据,但这只是我试图学习的初学者的东西

/**interface file **/
#import "newUser.h"

@interface BWViewController : UIViewController
{

    IBOutlet UITextField *userNameField;
    IBOutlet UITextField *passwordField;
    IBOutlet UILabel * loginStatus;

}

@property (nonatomic, copy) NSDictionary * aUser;

-(IBAction)signUpButton;

@end


/**implementation file**/


@interface BWViewController ()

@end

@implementation BWViewController

@synthesize aUser;

- (void)viewDidLoad
{
    [super viewDidLoad];

}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
}

-(IBAction) signUpButton
{

    newUser * firstUser = [[newUser alloc] init];
    firstUser.userName = userNameField.text;
    firstUser.password = passwordField.text;

    NSLog(@"%@", firstUser.userName);  /**for testing**/
    NSLog(@"%@", firstUser.password);  /**for testing**/

    aUser = [[NSDictionary alloc] initWithObjects:[NSArray arrayWithObjects:firstUser, nil] forKeys:[NSArray arrayWithObjects:userNameField.text, nil]];

    NSUserDefaults * defaults = [NSUserDefaults standardUserDefaults];

    [defaults setObject:aUser forKey:userNameField.text];
    [defaults synchronize];

    loginStatus.text = @"Thanks for signing up!";

}

更好的方法是存储两个用户默认值,一个是用户名,一个是密码:

NSUserDefaults * defaults = [NSUserDefaults standardUserDefaults];

[defaults setObject:firstUser.userName forKey:@"USERNAME"];
[defaults setObject:firstUser.password forKey:@"PASSWORD"];

[defaults synchronize];
它不起作用,因为您希望使用nsarray和自定义对象(firstUser)存储nsdictionary,但NSUserDefaults不允许您存储自定义对象。 希望这有帮助

//延伸

通过
saveForKey:
newUseFromKey:
我的意思是这样的:

+(void)saveForKey:(NSString*)key
{
    NSUserDefaults * defaults = [NSUserDefaults standardUserDefaults];

    [defaults setObject:self.userName forKey:[NSString stringWithFormat:@"%@_USERNAME", key]];
    [defaults setObject:self.password forKey:[NSString stringWithFormat:@"%@_PASSWORD", key]];
    //.... other properties

    [defaults synchronize];
}

+(newUser)newUseFromKey:(NSString*)key
{
    newUser * user = [[newUser alloc] init];
    NSUserDefaults * defaults = [NSUserDefaults standardUserDefaults];
    user.userName = [defaults objectForKey:[NSString stringWithFormat:@"%@_USERNAME", key]];
    user.password = [defaults objectForKey:[NSString stringWithFormat:@"%@_PASSWORD", key]];
    //.... other properties
    return user;

}
如果您不存储太多的newUser对象,并且它们没有太多的属性,那么这是一个很好的解决方案。
最好的选择是将所有对象放入数组/字典(这取决于您,两者之间没有最佳选择),然后将其保存到文件中。请记住,如果要将自定义对象保存到文件系统,则必须实现NSCoding协议。

谢谢您提供的信息greg。我想在我的自定义对象(firstUser)中存储所有信息,如用户名、密码、位置、年龄等,只需将用户名用作访问自定义对象及其所有包含数据的密钥。看起来编码是唯一的方法…您可以向类(newUser)添加两个方法-saveForKey:和newUseFromKey:,这两个方法将自身保存为用户默认值,并从默认值创建对象。但如果要保存大量对象,请不要使用nsuserdefaults。您可以将对象添加到数组并将其保存到文件中。我不知道您所说的saveForKey:和newUseFromKey:是什么意思?您认为最好将对象存储在数组中并保存到文件中?将一个对象保存在字典中,然后将字典保存到文件中不是更好吗?@Brosef请参阅编辑的帖子。谢谢您的解释!如果我想向对象添加其他属性,那么存储和检索用户信息的正确方法是什么?