【问题标题】:How to overwrite NSUserDefaults?如何覆盖 NSUserDefaults?
【发布时间】:2013-01-29 16:37:12
【问题描述】:

我有 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];
    }

}

【问题讨论】:

  • 你能简化你的问题吗?似乎所有这些代码都可能不是重点。如果您只想在 NSUserDefaults 中存储一个日期时间,请使用它的 timeIntervalSince1970 存储它。

标签: ios objective-c datepicker nsuserdefaults uilocalnotification


【解决方案1】:

您可以将 NSDate 存储在 NSUserDefaults 中而不会被覆盖。 这个问题在这里讨论得更详细What's the optimum way of storing an NSDate in NSUserDefaults?

您也可以将日期存储在 NSUserDefault 数组中。所以我不认为重写标准 UserDefaults 是个好主意,相反,您可以创建 Category 扩展来实现更多抽象。

【讨论】:

  • 我只想用用户选择的时间替换默认的 date1 ..如果用户没有选择新的时间,那么默认时间通知应该会出现..
  • 据我了解,您不仅需要替换 userDefaults 中保存的值,还需要更改当前安排本地通知的触发日期?
  • 我想你应该取消已开始的通知,并用新的开火日期重新创建它们
猜你喜欢
  • 2014-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多