- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    NSUserDefaults *somet = [NSUserDefaults standardUserDefaults];

    NSMutableArray *anArr = [somet objectForKey:@"somedata"] ;

    NSLog(@"anArr::: %@",anArr);

}

-(IBAction)addsomething:(id)sender{

   if (something == nil) {
        array = [[NSMutableArray alloc] init];
    }
    NSLog(@"textfieldvalue::: %@", textfield.text);

    [array addObject:textfield.text];

    NSUserDefaults *something = [NSUserDefaults standardUserDefaults];

    [something setObject:array forKey:@"somedata"];

    array = [something objectForKey:@"somedata"];

    NSLog(@"array:: %@", array);

}


使用以上代码,我试图将数据动态保存在NSMutableArray中,然后将其保存在NSUserDefaults中。但是在检索它时,我得到(空)。甚至没有将数据保存在数组中。

如何正确保存数据?

EDITED:

2012-03-15 15:17:18.431 check[2686:40b] anArr::: (null)
2012-03-15 15:17:30.160 check[2686:40b] textfieldvalue::: a
2012-03-15 15:17:30.162 check[2686:40b] array::: (null)

最佳答案

没有冒犯,但您的代码是一大堆废话。


名为something的变量没有用。期。
您在本地方法中有一个名为something的变量。而且您有一个名为something的变量,它是您班级的一部分。出现“局部变量隐藏实例变量”警告是有原因的!
可能那就是您所有问题出处的地方。我认为您不太了解局部变量的概念。如果是这样,您应该阅读更多有关基本Objective-C的知识。
您检查某物是否为零,然后不进行任何更改,但分配一个数组。这两个彼此无关。不要写这样的代码。


我为您修复了:

- (void)viewDidLoad
{
    [super viewDidLoad];
    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
    NSArray *anArr = [userDefaults objectForKey:@"somedata"];
    NSLog(@"anArr::: %@",anArr);
}

-(IBAction)addsomething:(id)sender{
    NSMutableArray *array = [[NSMutableArray alloc] init];
    NSLog(@"textfieldvalue::: %@", textfield.text);
    [array addObject:textfield.text];
    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
    [userDefaults setObject:array forKey:@"somedata"];
    array = [userDefaults objectForKey:@"somedata"];

    // synchronize is only needed while debugging (when you use the stop button in Xcode)
    // you don't need this in production code. remove it for release
    [userDefaults synchronize];

    NSLog(@"array:: %@", array);
}




但是,最有可能要将对象保存到从userDefaults获得的数组中。那将不适用于局部变量!

您将使用类似这样的东西。但是,请勿逐字复制。尝试了解它,并了解有关局部变量的更多信息。

NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
array = [[userDefaults objectForKey:@"somedata"] mutableCopy];
if (!array) {
    // create array if it doesn't exist in NSUserDefaults
    array = [[NSMutableArray alloc] init];
}
NSLog(@"array in viewDidLoad: %@",array);



NSLog(@"textfieldvalue::: %@", textField.text);
[array addObject: textField.text];
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
[userDefaults setObject:array forKey:@"somedata"];

// synchronize is only needed while debugging (when you use the stop button in Xcode)
// you don't need this in production code. remove it for release
[userDefaults synchronize];

关于iphone - NSMutableArray和NSUserdefaults发行iPhone,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9715873/

10-13 08:44