在我的代码中,我正在检索用户提醒并向他们显示一个tableview。 每当我在代码中打印NSLog时,tables数组都会正确显示。但是每当我在代码中遗漏NSLog时,我的数据就不再正常显示了。提醒的“标题”值返回(null)。
我每次都可以重现这个问题。任何人都知道这里发生了什么?
- (void)shareReminderButtonAction:(UIButton *)buttonEvent {
EKEventStore *store = [[EKEventStore alloc] init];
NSPredicate *predicate = [store predicateForRemindersInCalendars:nil];
[store requestAccessToEntityType:EKEntityTypeReminder completion:^(BOOL granted, NSError *error) {
[store fetchRemindersMatchingPredicate:predicate completion:^(NSArray *reminders) {
ReminderView *shareRem = [[ReminderView alloc]init];
NSLog(@"Reminders: %@", reminders);
UINavigationController *navigation = [[UINavigationController alloc] initWithRootViewController:shareRem];
[navigation setNavigationBarHidden:YES];
[[UIApplication sharedApplication].keyWindow.rootViewController presentViewController:navigation animated:YES
completion:^(void){[shareRem setArray:reminders];}];
}];
}];
}
在上面的代码中使用NSLog记录数据:
"EKReminder <0x1d5b3630> {title = Gdghv; dueDate = 2013-03-06 22:00:00 +0000; completionDate = (null); priority = 0; calendarItemIdentifier = 0BD2CB76-588B-4103-86B0-D71D22317DC0}"
在上面的代码中接收没有NSLog的数据时,在UITableViewController端记录数据:
CADObjectGetInlineStringProperty failed fetching title for EKPersistentReminder with error Error Domain=NSMachErrorDomain Code=268435459 "The operation couldn\342\200\231t be completed. (Mach error 268435459 - (ipc/send) invalid destination port)"
"EKReminder <0x1c5e6fd0> {title = (null); dueDate = (null); completionDate = (null); priority = 0; calendarItemIdentifier = (null)}"
非常感谢!
答案 0 :(得分:0)
在使用Event Kit对象的整个过程中,需要保留EKEventStore对象。通常最好把它放在一个单身人士里面。来自Apple's docs:
EKEventStore对象需要相对较长的时间 初始化和发布。因此,您不应该初始化和 为每个与事件相关的任务发布单独的事件存储。代替, 在您的应用加载并使用它时初始化单个事件存储 反复确保你的联系是长寿的。
事件存储实例不得在其他Event Kit之前发布 对象;否则,可能会发生未定义的行为。