如何覆盖NSUserDefaults?

时间:2013-01-29 16:37:13

标签: ios objective-c datepicker nsuserdefaults uilocalnotification

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

}

1 个答案:

答案 0 :(得分:0)

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

您还可以存储NSUserDefault日期数组。因此,我不认为重写标准UserDefaults是个好主意,而是可以创建Category扩展来实现更多抽象。