Spo*_*ude 0 icalendar objective-c xcode4
我的iPad上有两(2)个日历(iCal)(一个个人,一个用于应用程序).它们与我的iMac同步,仅用于测试.(节省我在特定应用程序日历中输入的时间).
我目前正在编写一个需要访问应用程序日历的应用程序.它是iPad上的主要日历.我试图让Apple的SimpleEKDemo(未经修改)与应用程序的日历一起工作,但到目前为止我甚至不能让它不崩溃,更不用说返回任何东西了.我几个小时以来一直在关注谷歌和SO问题,并决定是时候召唤大枪了.
这是它崩溃的代码:
- (void)viewDidLoad
{
self.title = @"Events List";
// Initialize an event store object with the init method. Initilize the array for events.
self.eventStore = [[EKEventStore alloc] init];
self.eventsList = [[NSMutableArray alloc] initWithArray:0];
// Get the default calendar from store.
self.defaultCalendar = [self.eventStore defaultCalendarForNewEvents]; // <---- crashes here --------
// Create an Add button
UIBarButtonItem *addButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:
UIBarButtonSystemItemAdd target:self action:@selector(addEvent:)];
self.navigationItem.rightBarButtonItem = addButtonItem;
[addButtonItem release];
self.navigationController.delegate = self;
// Fetch today's event on selected calendar and put them into the eventsList array
[self.eventsList addObjectsFromArray:[self fetchEventsForToday]];
[self.tableView reloadData];
}
Run Code Online (Sandbox Code Playgroud)
这是"崩溃"的输出:
2012-10-05 14:33:12.555 SimpleEKDemo[874:907] defaultCalendarForNewEvents failed: Error Domain=EKCADErrorDomain Code=1013 "The operation couldn’t be completed. (EKCADErrorDomain error 1013.)"
Run Code Online (Sandbox Code Playgroud)
我需要确保我的日历正确...我该怎么做?
Wri*_*sCS 12
您需要确保在尝试访问事件存储之前询问权限.请注意,您只需要调用一次.如果用户拒绝访问,则需要转到iOS设置(请参阅代码中的注释)以启用应用程序的权限.
/* iOS 6 requires the user grant your application access to the Event Stores */
if ([eventStore respondsToSelector:@selector(requestAccessToEntityType:completion:)])
{
/* iOS Settings > Privacy > Calendars > MY APP > ENABLE | DISABLE */
[eventStore requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error)
{
if ( granted )
{
NSLog(@"User has granted permission!");
}
else
{
NSLog(@"User has not granted permission!");
}
}];
}
Run Code Online (Sandbox Code Playgroud)
在iOS 5中,您只能访问EKEntityTypeEventEvent Store中的Events(),这与您可以访问Reminders(EKEntityTypeReminder)的iOS 6不同.但是你需要上面的代码至少获得一次授权.
我还要提一下,在您访问之前,您需要获得许可EventStore:[self.eventStore defaultCalendarForNewEvents];.
此外,defaultCalendarForNewEvents这将是访问用户默认日历的正确方法.如果您希望访问具有其他名称的日历,则需要遍历日历并根据返回的结果选择适当的日历.
| 归档时间: |
|
| 查看次数: |
6218 次 |
| 最近记录: |