2013-10-21 4 views
1

IOS 일정에 이벤트 배열을 추가하고 있습니다. 버튼을 클릭하면 문제가 발생하므로 모든 이벤트가 반복해서 추가됩니다. 그래서 이상 내가 위의 코드에 의해 IOS의 이벤트 저장소에서 모든 이벤트를 가져 오지 않고 중복 이벤트를 확인하십시오.

NSDate *edate=[formatter dateFromString:startDateString]; 
NSDate *fdate=[formatter dateFromString:endDateString]; 


NSLog(@"Start Date is %@",edate); 
NSLog(@"End Date is %@",fdate); 

event1.startDate =edate; 
event1.endDate=fdate; 


NSArray *caleandarsArray = [[NSArray alloc] init]; 
caleandarsArray = [eventStore calendars] ; 

NSPredicate *predicateForEvents = [eventStore predicateForEventsWithStartDate:edate endDate:fdate calendars:caleandarsArray]; // nil will search through all calendars 


NSArray *eventsOnDate = [eventStore eventsMatchingPredicate:predicateForEvents]; 

NSLog(@"Events on holday date is %@",eventsOnDate); 


BOOL eventExists = NO; 

for (EKEvent *eventToCheck in eventsOnDate) 
{ 

    NSLog(@" eventToCheck title is %@",eventToCheck.title); 
    NSLog(@" myTripsArray title is %@",[myTripsArray objectAtIndex:i]); 

    if ([eventToCheck.title isEqualToString:[myTripsArray objectAtIndex:i]]) 
    { 
      eventExists = YES; 
     NSLog(@"Event already existed"); 

    } 
    } 



    if (eventExists == NO) 
     { 

     [event1 setTimeZone:[NSTimeZone systemTimeZone]]; 
     [event1 setCalendar:[eventStore defaultCalendarForNewEvents]]; 
     NSError *err; 
     if(err) 
     { 
      NSLog(@"Error occured"); 

     } 
      else 
     { 
      NSLog(@"Error not occured"); 

     } 
       [eventStore saveEvent:event1 span:EKSpanThisEvent error:&err]; 
     } 

} 

아래 난 단지 생일 행사하지 존재하는 다른 이벤트를 얻고처럼 모든 이벤트 및 수행 검증을받을 자 NSPredicate를 사용하는 것이라한다. 캘린더에서 모든 일정을 가져 오는 방법.

내가 잘못한 곳에서 도와주세요.

답변

3

내가 무시 중복으로

-(void)addingDetailsToCalender 
{ 

EKEvent *event1 = [EKEvent eventWithEventStore:eventStore]; 
[email protected]"Hyderabad"; 
[email protected]"Sample test Satya "; 

event1.startDate =[NSDate date]; 
// event1.endDate=[NSDate dateWithTimeIntervalSinceNow:86400];; 
NSCalendar *calendar = [NSCalendar currentCalendar]; 
NSDateComponents *comps = [NSDateComponents new]; 
comps.day = 7; 
NSDate *sevenDays = [calendar dateByAddingComponents:comps toDate:[NSDate date] options:0]; 

NSLog(@"Seven days date is %@",sevenDays); 
event1.endDate=sevenDays; 

    NSPredicate *predicateForEvents = [eventStore predicateForEventsWithStartDate:[NSDate date] endDate:[NSDate dateWithTimeIntervalSinceNow:10*365*86400] calendars:nil]; 

NSArray *eventsOnDate = [eventStore eventsMatchingPredicate:predicateForEvents]; 

NSLog(@"Events on holday date is %@",eventsOnDate); 


BOOL eventExists = NO; 

for (EKEvent *eventToCheck in eventsOnDate) 
{ 

    NSDateFormatter *dateFormatter=[[NSDateFormatter alloc]init]; 
    [dateFormatter setDateFormat:@"yyyy-MM-dd"]; 
    NSString *startDateStr=[NSString stringWithFormat:@"%@", 
          [dateFormatter stringFromDate:eventToCheck.startDate]]; 
    NSString *event1startDate= [NSString stringWithFormat:@"%@", [dateFormatter stringFromDate:event1.startDate]]; 
    NSLog(@"mystart date is %@",startDateStr); 
    NSLog(@"my event start date is %@",event1startDate); 


     if ([eventToCheck.title isEqualToString:event1.title] && [startDateStr isEqualToString:event1startDate]) 
    { 
    eventExists = YES; 
    NSLog(@"Event already existed"); 

    } 
} 


if (eventExists == NO) 
{ 

    [event1 setTimeZone:[NSTimeZone systemTimeZone]]; 
    [event1 setCalendar:[eventStore defaultCalendarForNewEvents]]; 
    NSError *err; 
if(err) 
{ 
    NSLog(@"Error occured"); 

} 
    else 
{ 

    NSLog(@"Error not occured"); 

} 
[eventStore saveEvent:event1 span:EKSpanThisEvent error:&err]; 

} 

} 
0

지금까지 코드를 분석 한 결과 NSPredicate에서 캘린더 nil을 설정해야합니다. 이

NSPredicate *predicateForEvents = [eventStore predicateForEventsWithStartDate:edate endDate:fdate calendars:nil]; // nil will search through all calendars. 

희망처럼이 ... 그것을

+0

없음 친구 달력없는 이벤트를 추가 아래 코드

-(IBAction)calenderButtonAction:(id)sender { eventStore = [[EKEventStore alloc] init]; if ([eventStore respondsToSelector:@selector(requestAccessToEntityType:completion:)]) { // the selector is available, so we must be on iOS 6 or newer [eventStore requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error) { dispatch_async(dispatch_get_main_queue(), ^{ if (error) { // display error message here NSLog(@"error"); } else if (!granted) { // display access denied error message here NSLog(@"not granted"); } else { // access granted NSLog(@" granted"); [self addingDetailsToCalender]; // ***** do the important stuff here ***** } }); }]; } } 

를 사용하여 그것을 해결하는 데 도움이 도움이되지 않았습니다 .. – iSwaroop

+0

"EKEvent {\ n \ t EKEvent <0xd2be4f0> \ n {\ t 제목 = \ t \ tLaxman Rajana \ U2019s Bir thday; \ n \ t 위치 = \ t (null); \ n \ t 캘린더 = \ tEKCalendar <0xd2b7b80> {title = 생일}; type = Birthday; allowsModify = NO; color = # 8295AF;}; \ n \ t alarms = \ t \ t (null); \ n \ t URL = \ t \ t \ t (null); \ n \ t lastModified = (null); \ n \ t timeZone = \ t (null) \ n}; \ n \ t 위치 = \ t (null); \ n \ t startDate = \ t2013-10-20 18:30:00; \ n \ t endDate = \ t \ t2013-10-21 18:29:59; \ n \ t allDay = \ t \ t1; \ n \ t 플로팅 = \ t1; \ n \ t 반복 = \ tEKRecurrenceRule <0x12a36f90> RRULE FREQ = YEARLY, INTERVAL = 1; \ n \ t 참석자 = \ t (null) \ n}; – iSwaroop