NSUserDefaults导致崩溃

时间:2013-02-27 23:32:02

标签: iphone sdk nsuserdefaults

长话短说,我目前在viewDidLoad中使用此代码来恢复已保存的任何值(使用NSUserDefaults),并检查这是否是第一次运行应用程序。一切正常,直到我通过重新启动手机或从我的多任务中删除应用程序来测试NSUserDefaults。基本上应用程序打开冻结,崩溃,无法做任何事情。我觉得它与回忆可能不存在的值有关。

NSDictionary *defaultsDict =
[[NSDictionary alloc] initWithObjectsAndKeys:[NSNumber numberWithBool:YES], @"FirstLaunch", nil];
[[NSUserDefaults standardUserDefaults] registerDefaults:defaultsDict];

NSUserDefaults *sharedDefaults = [NSUserDefaults standardUserDefaults];
if ([sharedDefaults boolForKey:@"FirstLaunch"]) {

    NSLog(@"first launch");

    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:0.5];
    [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:self.view cache:YES];
    [nameView removeFromSuperview];
    [amountView removeFromSuperview];
    [self.view addSubview:firstView];
    [initialText becomeFirstResponder];

    [sharedDefaults setBool:NO forKey:@"FirstLaunch"];
    [sharedDefaults synchronize];
}

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

NSObject * object = [defaults objectForKey:@"budgetLabel"];
if(object != nil){

    NSString *budgetSaved = [defaults objectForKey:@"budgetLabel"];
    NSArray *namesSaved = [defaults objectForKey:@"nameArray"];
    NSArray *pricesSaved = [defaults objectForKey:@"priceArray"];

    budgetLabel.text = budgetSaved;
    [nameArray addObjectsFromArray:namesSaved];
    [priceArray addObjectsFromArray:pricesSaved];
} else {

}

请记住,任何帮助都表示赞赏!

修改

这是我用来存储数据的代码:

- (void)saveData {
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:budgetLabel.text forKey:@"budgetLabel"];
[defaults setObject:nameArray forKey:@"nameArray"];
[defaults setObject:priceArray forKey:@"priceArray"];
[defaults synchronize];
}

2 个答案:

答案 0 :(得分:0)

NSArray *namesSaved = [defaults objectForKey:@"nameArray"];

使用此方法,您将获得非可变数组,然后

[nameArray addObjectsFromArray:namesSaved];

您正在mutableArray中添加它。

这就是它造成崩溃的原因。

答案 1 :(得分:0)

解决!

我用以下代码解决了我的问题:

nameArray = [[defaults mutableArrayValueForKey:@"nameArray1"] mutableCopy];
priceArray = [[defaults mutableArrayValueForKey:@"priceArray1"] mutableCopy];

感谢大家的帮助!