2012-03-13 7 views
0

ネイティブのiPhoneカレンダーにイベントを追加するこのメソッドがあります。 すでに毎月のリマインダが正常に追加されていますが、月曜日のリマインダを強制的に週末(週末ではない)にしたいと考えています。EKRecurrenceRule - 定期的なイベントを追加しますが、週末は除外します

NSDictionaryのモデルは、単にイド です: Start_Date__c Finish_Date__c Payment_Interval__c =月刊

- (void)addRecurringEventsForPartnership:(NSDictionary *)dict{ 
    ENTER_METHOD; 

    NSError *error = nil; 
    EKEvent *startEvent = [EKEvent eventWithEventStore:self.eventStore]; 
    startEvent.calendar = self.defaultCalendar; 
    startEvent.availability = EKEventAvailabilityFree; 
    startEvent.startDate = [NSDate dateWithLongFormatString:[dict valueForKey:@"Start_Date__c"]]; 
    startEvent.allDay = YES; 
    // startEvent.endDate = [startEvent.startDate dateByAddingTimeInterval:30*60]; 
    startEvent.title = [dict theNameValue]; 
    //http://stackoverflow.com/questions/7718006/xcode-why-is-my-event-not-being-added-to-the-calendar 
    if ([startEvent.startDate isEqualToDate:startEvent.endDate]) { 
     startEvent.endDate = [startEvent.startDate dateByAddingTimeInterval:30*60];; 
    } 

    // if 
    if ([[dict valueForKey:@"Payment_Interval__c"] isEqualToString:@"Monthly"]) { 
     EKRecurrenceFrequency freq = EKRecurrenceFrequencyMonthly; 
     int recurrenceInterval = 1; 

     EKRecurrenceRule *rule = [[EKRecurrenceRule alloc] initRecurrenceWithFrequency:freq interval:recurrenceInterval end:nil]; 
     startEvent.recurrenceRule = rule; 

     startEvent.notes = [NSString stringWithFormat:@"Id:%@",[dict valueForKey:@"Id"]]; 
     // [self.eventStore removeEvent:startEvent span:EKSpanThisEvent error:&error]; 
     [self.eventStore saveEvent:startEvent span:EKSpanThisEvent error:&error]; 

     if (error != nil) 
     { 
      DLog(@"WARNING:%@",error.description); 
      // TODO: error handling here 
     } 
    } 



    // DLog(@"startEvent.endDate:%@",startEvent.endDate); 


    EKEvent *finishEvent = [EKEvent eventWithEventStore:self.eventStore]; 
    finishEvent.calendar = self.defaultCalendar; 
    finishEvent.availability = EKEventAvailabilityFree; 
    finishEvent.startDate = [NSDate dateWithLongFormatString:[dict valueForKey:@"Finish_Date__c"]]; 
    finishEvent.allDay = YES; 
    finishEvent.title = [NSString stringWithFormat:@"%@ - Finish",[dict theNameValue]]; 


    finishEvent.notes = [NSString stringWithFormat:@"Id:%@",[dict valueForKey:@"Id"]]; 
    [self.eventStore saveEvent:finishEvent span:EKSpanThisEvent error:&error]; 

    if (error != nil) 
    { 
     DLog(@"WARNING:%@",error.description); 
     // TODO: error handling here 
    } 

} 
+0

これにはどんな解決策がありましたか?私はMonthlyの再発を編集しようとしていましたが、その日の残りは同じ時間に発生します。どのように達成できますか? –

答えて

1

あなたは週の数値の曜日を取得してから1を減算または追加することによって調整するNSDateFormatterを使用することができませんでしたか返された日に応じて2か。

[dateFormatter setDateFormat:@"c"]; 

は、曜日を(1-7)の数値が返されます、私は

1

はここで働く何か(少なくともiOS7で、他のシステムでテストしていない)だと信じて:

EKRecurrenceRule *er = [[EKRecurrenceRule alloc] initRecurrenceWithFrequency:EKRecurrenceFrequencyMonthly interval:1 
                    daysOfTheWeek:@[[EKRecurrenceDayOfWeek dayOfWeek:2], // Monday 
                        [EKRecurrenceDayOfWeek dayOfWeek:3], // Tuesday 
                        [EKRecurrenceDayOfWeek dayOfWeek:4], // Wednesday 
                        [EKRecurrenceDayOfWeek dayOfWeek:5], // Thursday 
                        [EKRecurrenceDayOfWeek dayOfWeek:6]] // Friday 
                    daysOfTheMonth:@[@1, @2] 
                   monthsOfTheYear:nil weeksOfTheYear:nil daysOfTheYear:nil setPositions:nil end:nil]; 
event.recurrenceRules = @[er]; 
関連する問題