iphone - NSMutableArray 和 NSUserdefaults 问题 iPhone

标签 iphone objective-c ios xcode

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

最佳答案

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

  1. 名为something 的变量没有用。时期。
  2. 您的本地方法中有一个名为 something 的变量。你有一个名为 something 的变量,它是你类(class)的一部分。 “局部变量隐藏实例变量”警告是有原因的!
    可能这就是您所有问题的来源。我认为您并不真正了解局部变量的概念。如果是这种情况,您应该阅读更多关于基本 Objective-C 的内容。
  3. 你检查是否有东西是零,然后你不改变东西但你分配了一个数组。这两者彼此没有任何关系。不要写这样的代码。

我帮你修好了:

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

相关文章:

objective-c - Objective C - 如何创建接口(interface)?

objective-c - 两条线之间的角度是错误的

ios - 无法再次翻转图层、CALayer、CATransform3D 旋转。

HTML 5 - anchor 不适用于 ios Safari

iphone - iOS Cocos2D播放2种背景音

iphone - 倒计时器iphone sdk?

objective-c - 用动画隐藏和显示 ScrollView

ios - 委托(delegate)和数据源不与 UIPickerViewDelegate 一起工作

ios - 当应用程序从后台带到前台时如何制作 UIAlertView

ios - Offcanvas 菜单 - CSS 过渡不适用于 iphone 3 和 4