iPhone saveEvent不保存事件

iPhone saveEvent不保存事件,iphone,eventkit,Iphone,Eventkit,我目前正在测试一个应用程序,它通过XML下载一个特殊事件列表,并在列表中提供这些事件,然后用户可以将这些事件添加到他们的日历中。单击“将事件添加到日历”按钮时,该函数将正确触发,并使用正确的日期设置事件,saveEvent函数返回noErr,但该事件从未出现在日历中。我检查过两款不同的iPhone,两款手机都有相同的行为。我不确定出了什么问题,因为似乎没有什么问题 我的活动代码如下: - (IBAction) addEvent:(id)sender { EKEventStore *eve

我目前正在测试一个应用程序,它通过XML下载一个特殊事件列表,并在列表中提供这些事件,然后用户可以将这些事件添加到他们的日历中。单击“将事件添加到日历”按钮时,该函数将正确触发,并使用正确的日期设置事件,
saveEvent
函数返回
noErr
,但该事件从未出现在日历中。我检查过两款不同的iPhone,两款手机都有相同的行为。我不确定出了什么问题,因为似乎没有什么问题

我的活动代码如下:

- (IBAction) addEvent:(id)sender
{
    EKEventStore *eventStore = [[[EKEventStore alloc] init] autorelease];

    EKEvent *newEvent = [EKEvent eventWithEventStore:eventStore];
    newEvent.title = _event.name;

    CFTimeZoneRef zone = CFTimeZoneCopySystem();
    CFAbsoluteTime absTime = CFGregorianDateGetAbsoluteTime([_event getStartDate], zone);
    NSDate *start = [(NSDate *)CFDateCreate(nil, absTime) autorelease];

    absTime = CFGregorianDateGetAbsoluteTime([_event getEndDate], zone);
    NSDate *end = [(NSDate *)CFDateCreate(nil, absTime) autorelease];

    CFRelease(zone);

    newEvent.startDate = start;
    newEvent.endDate = end;
    newEvent.allDay = [_event getAllDay];

    newEvent.notes = _event.description;


    [newEvent setCalendar:[eventStore defaultCalendarForNewEvents]];

    NSError *err;

    [eventStore saveEvent:newEvent span:EKSpanThisEvent error:&err]; 

    if (err == noErr) {
        UIAlertView *alert = [[UIAlertView alloc]
                              initWithTitle:@"Event Added"
                              message:[NSString stringWithFormat:@"%@ successfully added to calendar!", _event.name]
                              delegate:nil
                              cancelButtonTitle:@"OK"
                              otherButtonTitles:nil];
        [alert show];
        [alert release];
    }
}

在清理+重建之后,我确实在日历中显示了我的一个事件,但是当我上下滚动时,它似乎消失了。同样的事情发生在我添加的另一个日期,然后第三次测试没有结果。当我滚动和/或退出并重新输入日历时,是否存在删除这些日期的情况?

我在模拟器上也发生了同样的事情。再次清洁项目和建筑似乎使一切都顺利进行。(我为此损失了一天!!)


也许它对你有用…

也许不是一个正确的答案,但是在SDK/Xcode/OS更新之后,这个bug已经消失了

问题不在于没有添加事件,而在于一旦滚动UITableView,事件就会消失。当事件被添加并在打开日历后立即出现在屏幕上时,它们将是可见的,但是如果日期/事件不在视图中,它将看起来永远不会被添加。添加日期时没有错误,因此无法调试该问题


在iOS 5.1上继续测试需要对Lion进行操作系统更新,作为安装Xcode 4.3和最新SDK的先决条件。一旦进行了更新,事件将顺利添加并保留在列表中。不知道为什么,幸好问题解决了。

也许不再需要了,但我注意到,为了保存对日历的任何更改(在删除事件或创建新事件后),我还必须提交更改:

NSError *error = nil;

[_eventStore commit:&error];

if(error)
{
    NSLog(@"error %@", error);
}

令人惊讶的是,像这样的小东西能帮上忙。永远不要忘记清洁+重建。至少现在我看到了一些东西,尽管它还没有完全固定下来。这是你刚开始时坚持的方法之一,一旦你更熟悉这个系统,就会忘记。这几乎就像“关闭计算机-现在,再次打开它!”类型的解决方案,帮助台使用这些解决方案修复99%的问题:DI仍然无法追踪事件消失的原因。一旦添加,任何输入都将不胜感激。