我目前正在测试一个应用程序,该应用程序通过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];
}
}
在干净+重建之后,我确实在日历中显示了我的一个事件,但是当我向上和向下滚动时它似乎消失了。同样的事情发生在我添加的不同日期,然后第三次测试没有任何结果。当我滚动和/或退出并重新输入日历时,是否存在删除这些日期的内容?
答案 0 :(得分:2)
也许不是一个正确的答案,但在SDK / Xcode / OS更新之后,这个bug已经消失了。
问题不在于事件没有被添加,而是在UITableView滚动后它们会消失。当事件被添加并在打开日历时立即出现在屏幕上时,它们将是可见的,但是如果日期/事件不在视图中,则它似乎永远不会被添加。添加日期时没有错误,因此无法调试问题。
继续在iOS 5.1上进行测试需要对Lion进行操作系统更新,作为安装Xcode 4.3和最新SDK的前提条件。更新完成后,事件将顺利添加并保留在列表中。不知道为什么,但幸好这个问题已经解决了。
答案 1 :(得分:0)
我在模拟器上发生了同样的事情。清理项目和再次建设似乎使一切工作。 (我失去了一天的cos !!)
也许这对你有用......
答案 2 :(得分:0)
也许不再需要,但在我的情况下,我注意到,为了保存对日历的任何更改(删除事件或创建新事件后),我还必须提交更改:
NSError *error = nil;
[_eventStore commit:&error];
if(error)
{
NSLog(@"error %@", error);
}