iPhone:如何检测是否可以修改EKEvent实例?

Tom*_*ren 3 iphone objective-c eventkit

在iPhone上使用EventKit时,我注意到可能存在一些无法修改的事件.我到目前为止遇到的例子是生日和与CalDAV同步的事件.当您在iPhone上的标准内置日历应用程序中查看事件的详细信息时,右上角的"编辑"按钮在这些情况下不可见,在查看"正常"事件时可以看到该按钮.

我到处搜索,阅读所有文档,但我根本找不到任何告诉我如何检测这种行为!我之后只能检测到它:

  1. 编辑活动的标题
  2. 将其保存到事件存储区
  3. 检查事件的标题,如果没有更改,则不可编辑!

我正在寻找一种方法,我可以预先检测事件的不可编辑行为.我知道这是可能的,因为我已经看到其他日历应用程序正确实现了这一点.

Tom*_*ren 9

好吧,似乎SDK没有向我提供任何我可以用来检查EKEvent是否为只读的东西.我创建了一个解决方法,创建了一个向所有EKEvent实例添加"isReadOnly"方法的类别.

EKEvent + ReadOnlyCheck.h

@interface EKEvent(ReadOnlyCheck)
- (BOOL) isReadOnly;
@end`
Run Code Online (Sandbox Code Playgroud)

EKEvent + ReadOnlyCheck.m

#import "EKEvent+ReadOnlyCheck.h"

@implementation EKEvent(ReadOnlyCheck)

- (BOOL) isReadOnly {
    BOOL readOnly;
    NSString *originalTitle = [self.title retain];
    NSString *someRandomTitle = [NSString stringWithFormat:@"%i", arc4random()];

    self.title = someRandomTitle;
    readOnly = [originalTitle isEqualToString:self.title];
    self.title = originalTitle;
    [originalTitle release];

    return readOnly;
}
@end
Run Code Online (Sandbox Code Playgroud)

当上面的文件到位后,我可以简单地调用isReadOnly我选择的EKEvent.

#import "EKEvent+ReadOnlyCheck.h"
...
if ([event isReadOnly]) {
    // Do your thing
}
...
Run Code Online (Sandbox Code Playgroud)

  • 多年后,我们仍然有这个问题。例如,在 iOS 6 上设置标题似乎不起作用(意味着它显示为已更改)(使用 Exchange 日历),但更改日期有效(日期保持不变)。 (2认同)

Ole*_*ann 7

我还没有使用Event Kit,但从文档中可以看出,可编辑性是日历的属性,而不是事件的属性.event.calendar获取事件的日历,并calendar.allowsContentModifications告诉您日历是只读还是读写.

  • 感谢您的回答.我已经查看了日历的属性,但它仅适用于生日.此外,我确定无法在日历级别确定这一点,因为日历中的一个事件可能是可编辑的而另一个不是.如果某个事件已同步到手机上,则它是只读的,但如果我在本地向同一个日历添加新事件,则该信息是可编辑的. (2认同)