【问题标题】:iPhone saveEvent does not save eventiPhone saveEvent 不保存事件
【发布时间】:2012-02-16 15:47:34
【问题描述】:

我目前正在测试一个应用程序,该应用程序通过 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];
    }
}

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

【问题讨论】:

  • 我仍然无法找到事件在添加后消失的原因,我们将不胜感激。

标签: iphone eventkit


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    我在模拟器上也发生了同样的事情。清理项目并再次构建似乎使一切正常。 (我损失了一天!)

    也许它会为你工作......

    【讨论】:

    • 令人惊讶的是,像这样的小东西有多大帮助。永远不要忘记干净+重建。至少现在我看到了一些东西,虽然它还没有完全修复。
    • 这是您刚开始时坚持使用的方法之一,一旦您对系统更加熟悉就忘记了。它几乎就像“关闭计算机 - 现在,重新打开它!”输入帮助台用来修复 99% 的故障单的解决方案:D
    【解决方案3】:

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

    NSError *error = nil;
    
    [_eventStore commit:&error];
    
    if(error)
    {
        NSLog(@"error %@", error);
    }
    

    【讨论】:

      猜你喜欢
      • 2017-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-12
      相关资源
      最近更新 更多