- (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)
5条答案
按热度按时间w8biq8rn1#
无意冒犯但你的代码就是一堆垃圾
1.名为
something
的变量没有用。句号。1.你的局部方法中有一个名为something的变量。你有一个名为something的变量,它是你的类的一部分。“局部变量隐藏示例变量”警告是有原因的!
也许这就是你所有问题的来源。我认为你并没有真正理解局部变量的概念。如果是这样的话,你应该阅读更多关于Objective-C的基本内容。
1.你检查是否有值为nil,然后你不改变什么,只分配一个数组。这两个人没有任何关系。不要写这样的代码。
我帮你修好了:
但是,您很可能希望将对象保存到从userDefaults获得的数组中。这对局部变量不起作用!
你会用这样的东西。但别一字不差地抄。试着理解它,并阅读更多关于局部变量的内容。
hgncfbus2#
请尝试以下代码:
bjg7j2ky3#
您需要在
setObject:forKey
之后调用[[NSUserDefaults standardUserDefaults] synchronize];
。ie3xauqp4#
添加这一行,
在检索数据之前。
epggiuax5#
在将值保存到
NSUserDefaults
中时尝试此操作然后当你想要的时候用这个
我想这对你有帮助