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

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

  • 编辑事件的标题
  • 将其保存到事件存储
  • 检查事件的标题,如果它没有改变它是不可编辑的!

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

    最佳答案

    好吧,似乎 SDK 没有为我提供任何我可以用来检查 EKEvent 是否为只读的东西。我通过创建一个类别来创建一个解决方法,该类别将“isReadOnly”方法添加到所有 EKEvent 实例。

    EKEvent+ReadOnlyCheck.h

    @interface EKEvent(ReadOnlyCheck)
    - (BOOL) isReadOnly;
    @end`
    

    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
    

    当上述文件到位后,我可以简单地在我选择的 EKEvent 上调用 isReadOnly
    #import "EKEvent+ReadOnlyCheck.h"
    ...
    if ([event isReadOnly]) {
        // Do your thing
    }
    ...
    

    关于iPhone:如何检测是否可以修改 EKEvent 实例?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4475120/

    10-12 18:22