2012-05-31 86 views
1

我正在iOS5的EKEvent上工作。我可以添加,删除,列出事件,但现在的问题是当我尝试编辑现有事件时,“完成”按钮会产生问题。它不在eventEditViewController:方法内部。可能是什么问题?任何帮助将不胜感激。取消和删除按钮正在工作。当我编辑事件并单击“完成”时,控制台显示
Calendar: unable to save: (null)EKEvent编辑不起作用

这里是我试过的代码..

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    EKEventEditViewController* eventViewController = [[EKEventEditViewController alloc] init]; 
    event = [self.events objectAtIndex:indexPath.row]; 

    eventViewController.event = event; 
    eventViewController.editViewDelegate = self; 
    [self presentModalViewController: eventViewController animated:YES]; 
    [eventViewController release]; 
} 

-(void)eventEditViewController:(EKEventEditViewController *)controller 
     didCompleteWithAction:(EKEventEditViewAction)action { 
    EKEvent *thisEvent = controller.event; 
    NSError *error; 
    if ([controller.event.endDate isEqualToDate:controller.event.startDate]) { 
     controller.event.endDate = [controller.event.startDate dateByAddingTimeInterval:1.0]; // add one second 
    } 
    switch (action) { 
     case EKEventEditViewActionCancelled: 
      // User tapped "cancel" 
      NSLog(@"Canceled"); 
      break; 
     case EKEventEditViewActionSaved: 
      NSLog(@"Saved"); 
      [controller.eventStore saveEvent:controller.event span: EKSpanFutureEvents error:&error]; 
      break; 
     case EKEventEditViewActionDeleted: 
      // User tapped "delete" 
      NSLog(@"Deleted"); 
      // delete the event from event list 
      [self.events removeObject:thisEvent]; 
      // delete the event from event store 
      [self.eventStore removeEvent:thisEvent span:EKSpanThisEvent error:nil]; 
      // reload the tableView 
      [self.tableOutlet reloadData]; 
      break; 
     default: 
       NSLog(@"Default"); 
      break; 
    } 

    [self dismissModalViewControllerAnimated:YES]; 

} 
+0

也许不是解决你的问题,但要注意美国英语和英国英语之间的差异:在[文件](http://developer.apple.com/library /ios/#DOCUMENTATION/EventKitUI/Reference/EKEventEditViewDelegateRef/Reference/Reference.html)说它应该是'EKEventEditViewActionCanceled',而不是'EKEventEditViewActionCancelled'。 – 2012-06-01 10:11:19

+0

另外,你应该分别使用UIViewController方法'presentViewController:animated:completion:'和'dismissViewControllerAnimated:completion:'来代替'presentModalViewController:animated:'''和'dismissModalViewControllerAnimated:',因为后两者被标记为弃用[docs](http://developer.apple.com/library/ios/#DOCUMENTATION/UIKit/Reference/UIViewController_Class/Reference/Reference.html)。 – 2012-06-01 10:14:26

回答

1

我有同样的问题。问题出在我定义了eventStore的地方 - 可能是当您展示eventViewController时,您甚至看不到日历属性。

AppDelegate

__eventStore = [[EKEventStore alloc] init]; 

在你的类(我把这个viewDidLoad):

if (self.eventStore == Nil){ 
    id appDelegate = (id)[[UIApplication sharedApplication] delegate]; 
    self.eventStore = [appDelegate eventStore]; 
} 

终于把这个didSelectRowAtIndexPath你目前的视图之前

eventViewController.eventStore = [self eventStore]; 
4

根据docs,

eventStore

此属性必须显示视图之前设置。

所以,

eventViewController.eventStore = <your event store>; 
eventViewController.editViewDelegate = self; 

[self presentModalViewController: eventViewController 
         animated: YES]; 
+0

如果您忘记将eventStore绑定到具有访问日历的权限的EKEventEditViewController,则完美的答案。 –