- (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 中。但是在检索它时我得到了(null)。甚至数据也没有保存在数组中。
如何正确保存数据?
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 的变量,它是你类(class)的一部分。 “局部变量隐藏实例变量”警告是有原因的!
可能这就是您所有问题的来源。我认为您并不真正了解局部变量的概念。如果是这种情况,您应该阅读更多关于基本 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/