- (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/