能否通过EventKit访问EKReminder的标签与图片?接受私有API
通过EventKit获取提醒事项标签与图片的可行方案
官方EventKit框架没有公开接口直接获取提醒事项的标签和图片/附件,你测试的属性都是针对EKEvent(日历事件)的,而非EKReminder(提醒事项),所以返回nil是正常的。以下是基于私有API的可行方案:
一、获取提醒事项标签
EKReminder有私有属性tags,可通过KVC直接访问:
NSArray *tags = [reminder valueForKey:@"tags"]; NSLog(@"提醒事项标签:%@", tags);
- 若编译报错,需关闭Xcode的私有API检测,或通过运行时动态获取属性。
二、获取提醒事项图片/附件
方法1:调用EKEventStore私有方法
通过运行时动态调用fetchAttachmentsForReminder:completion:方法获取附件:
SEL fetchAttachmentsSel = NSSelectorFromString(@"fetchAttachmentsForReminder:completion:"); if ([store respondsToSelector:fetchAttachmentsSel]) { IMP imp = [store methodForSelector:fetchAttachmentsSel]; void (*fetchAttachmentsFunc)(id, SEL, EKReminder*, void(^)(NSArray*, NSError*)) = (void*)imp; fetchAttachmentsFunc(store, fetchAttachmentsSel, reminder, ^(NSArray *attachments, NSError *error) { if (!error) { for (id attachment in attachments) { // 获取附件本地路径 NSURL *fileURL = [attachment valueForKey:@"url"]; // 读取图片数据 NSData *imageData = [NSData dataWithContentsOfURL:fileURL]; NSLog(@"图片数据大小:%lu", (unsigned long)imageData.length); } } }); }
方法2:直接访问EKReminder私有属性
EKReminder的attachmentURLs属性可直接返回附件URL数组:
NSArray *attachmentURLs = [reminder valueForKey:@"attachmentURLs"]; for (NSURL *url in attachmentURLs) { NSData *imageData = [NSData dataWithContentsOfURL:url]; // 处理图片数据 }
重要提示
- 私有API无官方维护,iOS版本迭代可能导致接口失效,需针对不同系统版本适配。
- 使用私有API的应用无法通过App Store审核,仅适用于企业内部应用或非上架工具。
内容的提问来源于stack exchange,提问作者Daij-Djan
相关产品推荐
相关产品推荐

