3

我知道下面的代码对于在 iOS 日历中创建和添加事件非常有用。它工作得很好,我可以添加许多事件,但是对于一个事件,我必须按一下按钮。

- (IBAction)add_event:(id)sender{     
    EKEventStore *eventStore=[[EKEventStore alloc] init];
    EKEvent *addEvent=[EKEvent eventWithEventStore:eventStore];
    addEvent.title=@"title";
    addEvent.startDate = [NSDate date];
    addEvent.endDate = [addEvent.startDate dateByAddingTimeInterval:600];
    [addEvent setCalendar:[eventStore defaultCalendarForNewEvents]];
    NSError *err;
    [eventStore saveEvent:addEvent span:EKSpanThisEvent error:&err];
    if (err == nil) {
        NSString* str = [[NSString alloc] initWithFormat:@"%@", addEvent.eventIdentifier];
        NSLog(@"Event ID: %@" , str );
    }
    else {
        NSLog(@"Error %@",err);
    } 
}

然后我尝试在按钮触摸事件上添加许多带有while循环的事件,我编辑的代码在这里:

- (IBAction)add_event:(id)sender{
    int i = 0;
    while(i < 100){
        EKEventStore *eventStore=[[EKEventStore alloc] init];
        EKEvent *addEvent=[EKEvent eventWithEventStore:eventStore];
        addEvent.title=@"title";
        addEvent.startDate = [NSDate date];
        addEvent.endDate = [addEvent.startDate dateByAddingTimeInterval:600]; 
        [addEvent setCalendar:[eventStore defaultCalendarForNewEvents]]; 
        NSError *err;
        [eventStore saveEvent:addEvent span:EKSpanThisEvent error:&err];
        if (err == nil) {
            NSString* str = [[NSString alloc] initWithFormat:@"%@", addEvent.eventIdentifier];
            NSLog(@"Event ID %d: %@",i, str);
        }
        else {
            NSLog(@"Error %@",err);
        }
        i++;
    }
}

我想在日历中添加 100 个事件,但只有 82 个事件添加成功,所有 83 号事件都会出错。这是我的日志屏幕:

.......

2013-03-07 15:08:07.742 MyDTUSchedule[3066:c07] Event ID 79: BBCF7782-5D60-42D7-8478-EF80604FBF41:B0124DEE-EC5F-40B9-B9F8-312FA07D8059
2013-03-07 15:08:07.756 MyDTUSchedule[3066:c07] Event ID 80: BBCF7782-5D60-42D7-8478-EF80604FBF41:613F794D-67BE-4704-BEC2-7439E77965F0
2013-03-07 15:08:07.781 MyDTUSchedule[3066:c07] Event ID 81: BBCF7782-5D60-42D7-8478-EF80604FBF41:2FEF3B6D-6AC0-4058-AA79-BB46FEBDF732
2013-03-07 15:08:07.810 MyDTUSchedule[3066:c07] Error Error Domain=EKErrorDomain Code=1 "No calendar has been set." UserInfo=0x7e6a380 {NSLocalizedDescription=No calendar has been set.}
2013-03-07 15:08:07.812 MyDTUSchedule[3066:c07] Error Error Domain=EKErrorDomain Code=1 "No calendar has been set." UserInfo=0x7e6a9d0 {NSLocalizedDescription=No calendar has been set.}
2013-03-07 15:08:07.813 MyDTUSchedule[3066:c07] Error Error Domain=EKErrorDomain Code=1 "No calendar has been set." UserInfo=0x7e6c310 {NSLocalizedDescription=No calendar has been set.}
2013-03-07 15:08:07.815 MyDTUSchedule[3066:c07] Error Error Domain=EKErrorDomain Code=1 "No calendar has been set." UserInfo=0x7e6d5d0 {NSLocalizedDescription=No calendar has been set.}

...........

你能帮我解决这个问题吗?我在 iOS Simulator 5.0 中运行此代码。iOS Simulator 6.0 出现同样的错误,但事件编号为 124

4

1 回答 1

2

可能是内存问题。eventStore在每次循环迭代中分配并且从不释放。

尝试EKEventStore *eventStore=[[EKEventStore alloc] init];从循环中取出。

于 2013-03-08T01:45:05.827 回答