我有uilocalnotification,我使用NSDateComponents为每个通知设置不同的时间,具体取决于项目应该被通知的次数。
-(NSArray *)fireDatesForFrequency:(int)freq
{
if (freq == 1)
{
[components setHour:8];
[components setMinute:00];
NSDate *date = [gregorian dateFromComponents:components];
NSArray *dates =[[NSArray alloc]initWithObjects:date, nil];
return dates;
}
if (freq == 2) {
[components setHour:8];
[components setMinute:00];
NSDate *date1 = [gregorian dateFromComponents:components];
[components setHour:20];
[components setMinute:00];
NSDate *date2 = [gregorian dateFromComponents:components];
NSArray *dates =[[NSArray alloc]initWithObjects:date1,date2, nil];
return dates;
}
if (freq == 3)
{
[components setHour:8];
[components setMinute:00];
NSDate *date1 = [gregorian dateFromComponents:components];
[components setHour:12];
[components setMinute:00];
NSDate *date2 = [gregorian dateFromComponents:components];
[components setHour:16];
[components setMinute:00];
NSDate *date3 = [gregorian dateFromComponents:components];
NSArray *dates =[[NSArray alloc]initWithObjects:date1,date2,date3, nil];
return dates;
}
if (freq == 4)
{
[components setHour:8];
[components setMinute:00];
NSDate *date1 = [gregorian dateFromComponents:components];
[components setHour:12];
[components setMinute:00];
NSDate *date2 = [gregorian dateFromComponents:components];
[components setHour:16];
[components setMinute:00];
NSDate *date3 = [gregorian dateFromComponents:components];
[components setHour:20];
[components setMinute:00];
NSDate *date4 = [gregorian dateFromComponents:components];
NSArray *dates =[[NSArray alloc]initWithObjects:date1,date2,date3,date4, nil];
return dates;
}
return nil;
}
现在我想将这些时间存储在NSUserDefaults中,这样如果用户想要根据需要更改时间,我想将这些时间存储在NSUserdefaults中。我想用userupdatednsuserdefaults替换默认的NSuserdefaults。有使用datepicker的分段控件,所以当用户从datepicker中选择时间应该更新为默认nsuserdefaults时。如果用户选择第一个分段控件,那么该值应存储在
中- (IBAction)didChangeSegmentControl:(UISegmentedControl *)control
{
NSInteger index = [notificationSessionTab selectedSegmentIndex];
if (index == 0)
{
[userTimePicker reloadInputViews];
[components setHour:7];;
[components setMinute:00];
NSDate *date1 = [gregorian dateFromComponents:components];
[components setHour:9];
[components setMinute:00];
NSDate *date2 = [gregorian dateFromComponents:components];
//NSArray *dates =[[NSArray alloc]initWithObjects:date1,date2,date3,date4, nil];
[userTimePicker setDatePickerMode:UIDatePickerModeTime];
[userTimePicker setMinimumDate:date1];
[userTimePicker setMaximumDate:date2];
NSDate *selectedTime =[userTimePicker date];
}
if (index == 1)
{
[userTimePicker reloadInputViews];
[components setHour:11];
[components setMinute:00];
NSDate *date1 = [gregorian dateFromComponents:components];
[components setHour:13];
[components setMinute:00];
NSDate *date2 = [gregorian dateFromComponents:components];
//NSArray *dates =[[NSArray alloc]initWithObjects:date1,date2,date3,date4, nil];
[userTimePicker setDatePickerMode:UIDatePickerModeTime];
[userTimePicker setMinimumDate:date1];
[userTimePicker setMaximumDate:date2];
NSDate *selectedTime =[userTimePicker date];
}
if (index == 2)
{
[userTimePicker reloadInputViews];
[components setHour:15];
[components setMinute:00];
NSDate *date1 = [gregorian dateFromComponents:components];
[components setHour:18];
[components setMinute:00];
NSDate *date2 = [gregorian dateFromComponents:components];
//NSArray *dates =[[NSArray alloc]initWithObjects:date1,date2,date3,date4, nil];
[userTimePicker setDatePickerMode:UIDatePickerModeTime];
[userTimePicker setMinimumDate:date1];
[userTimePicker setMaximumDate:date2];
NSDate *selectedTime =[userTimePicker date];
}
if (index == 3)
{
[userTimePicker reloadInputViews];
[components setHour:19];
[components setMinute:00];
NSDate *date1 = [gregorian dateFromComponents:components];
[components setHour:21];
[components setMinute:00];
NSDate *date2 = [gregorian dateFromComponents:components];
//NSArray *dates =[[NSArray alloc]initWithObjects:date1,date2,date3,date4, nil];
[userTimePicker setDatePickerMode:UIDatePickerModeTime];
[userTimePicker setMinimumDate:date1];
[userTimePicker setMaximumDate:date2];
NSDate *selectedTime =[userTimePicker date];
}
}
答案 0 :(得分:0)
您可以将NSDate存储在NSUserDefaults中,而不会覆盖它。 这个问题在这里讨论得更详细What's the optimum way of storing an NSDate in NSUserDefaults?。
您还可以存储NSUserDefault日期数组。因此,我不认为重写标准UserDefaults是个好主意,而是可以创建Category扩展来实现更多抽象。