如果有人可以帮助我,或者可以给我一个面对类似问题的建议,我有一个问题。好的,我在这样的NSUsersDefaults中保存数据
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:getDate];
[defaults setObject:data forKey:@"data"];
[defaults synchronize];
现在我想以这种方式检索:
NSData *theData = [[NSUserDefaults standardUserDefaults] objectForKey:@"data"];
NSString *date = (NSString *) [NSKeyedUnarchiver unarchiveObjectWithData:theData];
if (date != nil) {
NSMutableArray *mutable = [[NSMutableArray alloc] init];
[mutable addObject:date];
}
显示的是最后一个值,该值是从pickerDate中选取的。如何保存我从pickerDate中选择的所有日期。非常感谢!!!
答案 0 :(得分:1)
我不认为这是他的问题。 NSUSerdefaults可用于存储日期 - 我已经看到它在堆栈中使用,我也使用过:
NSUserDefaults *dateData = [NSUserDefaults standardUserDefaults];
NSDate *selectedDate = [self.datePicker date];
[dateData setObject:selectedDate forKey:@"DatePickerViewController.selectedDate"];
他正在使用NSMutablearray-所以这也不是问题。 问题是两个中的一个:
1: 问题还可能是数组正在循环内初始化,并且正在删除保存在其中的先前值。
2: 我认为问题是将数据保存到数组中的代码所在的位置。 我认为一旦用户选择了一个日期,你需要调用方法将日期保存到数组中 - 问题是我不认为datepicker有一个委托方法可以知道用户已经这样做了。
(
有一个知道何时更改了任何一个字段:
[self.myDatePicker addTarget:self
action:@selector(myAction:)
forControlEvents:UIControlEventValueChanged];
但这对你没有帮助,因为每次更改一个字段时都会调用它 - 即:一旦你改变了月份字段就会调用它,一旦你改变了日期字段就会调用,等等。
)
也许你可以在datepicker中加入一个完成按钮,并调用一个方法,当用户点击这个按钮时,它会将日期存储到数组中......
答案 1 :(得分:1)
问题是您未正确使用NSMutableDictionary
。看看这段代码:
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:getDate];
[defaults setObject:data forKey:@"data"];
[defaults synchronize];
这意味着您始终会将日期保存在密钥data
下。由于您使用的是NSString
,这意味着如果data
下已有条目,则会覆盖它。例如:
首次使用您的应用时,保存data
下无任何内容。我选择" 1-20-2015",然后我的字典是:
{data:" 1-20-2015"}
现在我去挑选另一个约会," 2015年2月21日"。我已经在数据下有一个条目,所以这意味着它将其更新为:
{data:" 2-21-2015"}
了解我们如何删除" 1-20-2015"?这就是你发生的事情。
在Dictionary
中,键是唯一对象。您需要使用NSMutableArray
作为对象,或者为每个条目使用唯一键。
答案 2 :(得分:0)
Userdefaults不适用于数据存储。它是为了用户的喜好。不知何故,我认为"所有约会我都会从pickerDate"不是用户首选项。
您可以只存储NSDate
NSNumber
,而不是尝试存储@(date.timeIntervalSinceReferenceDate)
。使它变得更容易。
如果你想存储多个日期 - 这就是NSArray
的用途。
答案 3 :(得分:0)
我认为您以NSdate格式保存日期并在NSString中获取日期。
这样做
NSData *theData = [[NSUserDefaults standardUserDefaults] objectForKey:@"data"];
NSDate *date =[NSKeyedUnarchiver unarchiveObjectWithData:theData];