长话短说,我目前在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];
}
答案 0 :(得分:0)
NSArray *namesSaved = [defaults objectForKey:@"nameArray"];
使用此方法,您将获得非可变数组,然后
[nameArray addObjectsFromArray:namesSaved];
您正在mutableArray中添加它。
这就是它造成崩溃的原因。
答案 1 :(得分:0)
解决!
我用以下代码解决了我的问题:
nameArray = [[defaults mutableArrayValueForKey:@"nameArray1"] mutableCopy];
priceArray = [[defaults mutableArrayValueForKey:@"priceArray1"] mutableCopy];
感谢大家的帮助!