-1

如果有人可以帮助我或可以给遇到类似问题的人提供建议,我会遇到问题。好的,我像这样在 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中挑选的所有日期。非常感谢!!!

4

4 回答 4

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];

但这对您没有帮助,因为每次更改字段时都会调用它 - 也就是说:一旦您更改月份字段,它将调用一次,当您更改日期字段时等等。

)

也许您可以在日期选择器中包含一个完成按钮,并在用户单击此按钮时调用一个将日期存储到数组中的方法......

于 2015-03-20T10:59:01.753 回答
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”,然后我的字典是:

{数据:“2015 年 1 月 20 日”}

现在我去选择另一个日期,“2-21-2015”。我已经在数据下有一个条目,因此这意味着它将其更新为:

{数据:“2-21-2015”}

看看我们如何删除“1-20-2015”?这就是发生在你身上的事情。

在 aDictionary中,键是唯一的对象。您需要使用 anNSMutableArray作为对象,或为每个条目使用唯一键。

于 2015-03-20T17:11:06.887 回答
0

Userdefaults 不适用于数据存储。这是为了用户偏好。不知何故,我认为“我从 pickerDate 中挑选的所有日期”不是用户偏好。

NSDate您可以只存储一个 ,而不是尝试存储一个NSNumber @(date.timeIntervalSinceReferenceDate)。让它变得容易得多。

如果您想存储多个日期 - 这就是 anNSArray的用途。

于 2015-03-20T10:38:57.427 回答
0

我认为您在 NSdate 格式中保存日期并在 NSString 中获取日期。

这样做

NSData *theData = [[NSUserDefaults standardUserDefaults] objectForKey:@"data"];
 NSDate *date =[NSKeyedUnarchiver unarchiveObjectWithData:theData];
于 2015-03-20T11:04:05.217 回答