-1

长话短说,我目前在我的 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];
}
4

2 回答 2

0

解决了!

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

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

感谢大家的帮助!

于 2013-03-01T03:04:01.397 回答
0
NSArray *namesSaved = [defaults objectForKey:@"nameArray"];

使用它,您将获得非可变数组,然后

[nameArray addObjectsFromArray:namesSaved];

您正在将它添加到 mutableArray。

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

于 2013-02-28T09:15:26.347 回答