0

我正在制作一个创建新日历然后使用该日历添加事件等的应用程序。我可以很好地创建日历,但我正在尝试运行检查以查看日历是否存在,等等,不要每次都创建第二个同名的。换句话说,只创建一次新日历。

我正在设置一个 int 变量并运行一个循环来检查设备上每个日历的 title 属性,但是 int 变量永远不会改变,即使我正在搜索的日历名称的字符串匹配。

这是我的“检查日历”代码:

-(void)checkForCalendar {

    EKEventStore *eventStore = [[EKEventStore alloc] init];
    NSArray *calendarArray = [eventStore calendarsForEntityType:EKEntityTypeEvent];
    //NSLog(@"%@", calendarArray);

    for (int x = 0; x < [calendarArray count]; x++) {

        EKCalendar *cal = [calendarArray objectAtIndex:x];
        NSString *title = [cal title];
        if ([title isEqualToString:@"AFTP"] ) {
            calendarExists = 1;
        }else{
            calendarExists = 0;
        }
    }

[self createCalendar];

}

这是我为“创建”日历部分所拥有的:(效果很好,我总是得到一个“0”而不是 1 表示calendarExistsint。)

-(void)createCalendar {

    NSLog(@"%d",calendarExists);
    if (calendarExists == 0) {
        EKEventStore* eventStore = [[EKEventStore alloc] init];

        NSString* calendarName = @"AFTP";
        EKCalendar* calendar;

        // Get the calendar source
        EKSource* localSource;
        for (EKSource* source in eventStore.sources) {
            if (source.sourceType == EKSourceTypeCalDAV)
            {
                localSource = source;
                break;
            }
        }

        if (!localSource)
            return;

        calendar = [EKCalendar calendarForEntityType:EKEntityTypeEvent eventStore:eventStore];
        calendar.source = localSource;
        calendar.title = calendarName;

        [eventStore saveCalendar:calendar commit:YES error:nil];
    }
}
4

1 回答 1

1

我认为在您的代码的这一部分中:

    if ([title isEqualToString:@"AFTP"] ) {
        calendarExists = 1;
    }else{
        calendarExists = 0;
    }

将变量设置为 1 后需要中断,否则下一轮循环将再次将其设置回 0:

    if ([title isEqualToString:@"AFTP"] ) {
        calendarExists = 1;
        break;
    }
于 2012-10-21T20:44:26.300 回答