标签: ekeventstore

如何使用swift在设备日历中添加事件

我有兴趣知道如何在设备中添加日历事件,但使用swift.我知道在Objective-C中有一些例子,但目前没什么好快的.非常感谢.

ekevent ekeventstore swift

41
推荐指数
4
解决办法
3万
查看次数

获取实体类型3,Xcode 6.1.1的共享日历邀请时出错.EKCalender,EKSource,EKEventstore和Objective C

我正在开发日历应用程序.我正在尝试使用指定的EKCalender保存EKEvent.但是,当我尝试运行以下代码时,它给了我错误.请帮忙

-(BOOL)createEventWithTitle:(NSString *)paramTitle startDate:(NSDate *)paramStartDate endDate:(NSDate *)paramEndDate inCalendar:(EKCalendar *)paramCalendar inEventStore:(EKEventStore *)paramStore notes:(NSString *)paramNotes 
        {
         BOOL result = NO;

        //paramCalendar = [self.eventStoreiReportShifts defaultCalendarForNewEvents];
            if (self.eventsAccessGranted) {
                NSArray *caledars = [self.eventStore calendarsForEntityType:EKEntityTypeEvent];
                self.selectedCalendarEventKitIdentifier = [[NSUserDefaults standardUserDefaults] objectForKey:@"eventkit_cal_identifiers_string"];
                for(EKCalendar *aCal in caledars){
                    if([aCal.calendarIdentifier isEqualToString:self.selectedCalendarEventKitIdentifier]){
                        paramCalendar = [self.eventStore calendarWithIdentifier:[[NSUserDefaults standardUserDefaults] objectForKey:@"eventkit_cal_identifiers_string"]];
                    }
                }
                for (EKSource *source in self.eventStore.sources) {
                    if (source.sourceType == EKSourceTypeCalDAV) {
                        paramCalendar.source = source;
                        break;
                    } else if(source.sourceType == EKSourceTypeLocal){
                        paramCalendar.source = source;
                        break;
                    }
                }

        }else{
            return NO;
        }

        /* …
Run Code Online (Sandbox Code Playgroud)

iphone xcode objective-c ekeventkit ekeventstore

13
推荐指数
1
解决办法
4939
查看次数

使用calendarWithIdentifier的EKCADErrorDomain

在我的iOS应用程序中,我曾使用以下方法访问日历:

EKCalendar* cal = [eventStore calendarWithIdentifier:[calendarIDs objectAtIndex:i]];
Run Code Online (Sandbox Code Playgroud)

通过以下方式向用户询问权限:

eventStore requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted,NSError* error){}
Run Code Online (Sandbox Code Playgroud)

现在这在iOS 7上工作正常,但在iOS 8上,每次调用方法calendarWithIdentfier时我都会遇到以下错误:

Error getting shared calendar invitations for entity types 3 from daemon: 
Error Domain=EKCADErrorDomain Code=1013 
"The operation couldn’t be completed. (EKCADErrorDomain error 1013.)"
Run Code Online (Sandbox Code Playgroud)

我可以写\读日历没有问题,但我不明白为什么会引发这个异常.我已经尝试了一些这里提出的方法,但在这种情况下它们似乎都没有.

iphone ios ekeventstore ios8

12
推荐指数
1
解决办法
4740
查看次数

实现Sandbox时出错:"拒绝文件读取元数据/库"

我意识到我在游戏中有点迟到准备好沙箱,但事实就是如此.

我正在为OS X 10.9开发.该应用程序显示日历事件数据,但不允许编辑,因此我启用了日历功能.

当我从Xcode运行它时,该应用程序可以很好地启用沙盒,但是当我使用开发者ID导出它时,应用程序会运行,但无法访问日历数据.更重要的是,系统永远不会要求我允许该应用访问日历数据.

当我运行应用程序时,它会启动,但不会显示任何数据.在Console中,sandboxd会抛出一堆如下所示的错误:

sandboxd: ([54]) appleeventsd(54) deny file-read-metadata /Library

sandboxd: ([54]) appleeventsd(54) deny mach-lookup com.apple.ocspd

我已经检查了应用程序的权利codesign -d --entitlements,并确认它是沙盒并具有日历权利.但是,当我在应用程序中检查它是否有权访问[EKEventStore authorizationStatusForEntityType:EKEntityTypeEvent]时,不出所料,因为它从未问过,返回EKAuthorizationStatusNotDetermined.

我觉得我遗漏了一些关于权利,代码签名或部署的非常基本的东西,但我不知道它是什么.所以我把自己放在你的集体怜悯和智慧上.

macos code-signing sandbox entitlements ekeventstore

10
推荐指数
0
解决办法
5966
查看次数

确定您的应用是否可以访问日历而不启动请求?

我正在实现从我的应用程序中添加和删除iOS日历中用户创建的事件的功能.我已经为用户创建活动时编写了访问日历的权限请求,并且它运行良好.我将事件保存在服务器上,我允许它们稍后删除事件,当发生这种情况时,我也会从日历中删除事件.有人可以在此应用程序之外创建事件,打开应用程序,然后删除从服务器获取的约会.在这种情况下,日历中没有事件存储,但它仍然需要查看是否存在尝试删除它的事件,并且它失败了,因为在这种情况下我没有要求用户允许访问日历.

但我不想在删除时要求用户提供权限,因为用户不知道应用程序为什么要访问日历,因为他们从来不知道它可以将约会保存到日历 - 他们在网站上创建了它,并且他们没有理由在那个时候批准它,因为它无论如何都不会做任何事情.

因此,我的问题是,是否可以确定您的应用当前是否可以访问日历而不提出请求,这将导致在未授予权限的情况下向用户显示自动警报 - 请参阅下面的请求代码?我只是想搜索事件,试图删除它只有我已经有权访问日历,如果我没有,我不会尝试删除任何东西.

[eventStore requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error) {
    if (granted) {
        //already have access or user tapped on Allow in popup
    }
    ...
Run Code Online (Sandbox Code Playgroud)

calendar objective-c ios ekeventstore

10
推荐指数
2
解决办法
4400
查看次数

EKEvent的eventIdentifier和calendarItemExternalIdentifier之间的区别

阅读Apple的文档,我仍然对EKCalenderItem的calendarItemExternalIdentifierEKEvent的eventIdentifier之间的差异感到困惑,我们应该使用哪一个来识别不同设备上的日历事件.特别:

EKCalendarItem calendarItemExternalIdentifier 日历服务器提供的日历项的外部标识符.(只读)

EKEvent eventIdentifier:事件的唯一标识符.(只读)

EKCalendarItem calendarItemExternalIdentifier是在iOS6中添加的,我原本认为这将是我需要保存的标识符,以便稍后调用,EKEventStore eventWithIdenfier:因为它声称:

此标识符允许您跨多个设备访问相同的事件或提醒.

但是在我自己的测试中,似乎当我创建并保存一个新的EKEvent时,我从EKEvent对象获得的eventIdenifier是唯一且有用的,而我得到的calendarItemExternalIdentifier似乎不适用于 EKEventStore eventWithIdenfier:

如果有人有确凿的答案,我很想知道.

objective-c ios eventkit ekevent ekeventstore

9
推荐指数
1
解决办法
2697
查看次数

使用Swift 3在OSX Sierra上使用EKEventStore访问日历的问题

这看起来非常简单,但我已经挣扎了几天才能访问OSX上的日历.我已经打开了App Sandbox功能,并在App Data中勾选了"日历"框.我用以下视图控制器类创建了非常简单的应用程序:

import Cocoa
import EventKit

class ViewController: NSViewController {

    var eventControl = EKEventStore()
    override func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view.
    }

    override var representedObject: Any? {
        didSet {
        // Update the view, if already loaded.
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

如您所见,我添加的唯一代码行是导入EventKit并初始化eventControl.

当我在调试中运行它时,我在eventControl初始化行中收到错误

2016-10-28 15:02:00.056521 calendarTest[4105:847101] CoreData: XPC:     Unable to load metadata: Error Domain=NSCocoaErrorDomain Code=134070 "An error occurred in the persistent store." UserInfo={Problem=request failed, insufficient permission}
2016-10-28 15:02:00.057742 calendarTest[4105:847101] [error] error: -addPersistentStoreWithType:NSXPCStore configuration:(null) URL:file:///Users/patrickramsden/Library/Calendars/Calendar%20Cache …
Run Code Online (Sandbox Code Playgroud)

macos xcode ekeventstore swift

9
推荐指数
1
解决办法
1009
查看次数

将事件保存到用户的日历

如何将事件添加到用户的日历中,然后允许用户选择日历等.我有此代码可用,但这会将事件添加到用户的默认日历.如何允许用户更改日历,自定义警报等?我见过其他应用程序打开日历应用程序并预​​先填写字段.

//add to calendar
                let eventStore : EKEventStore = EKEventStore()
                eventStore.requestAccessToEntityType(EKEntityType.Event, completion: { (granted, error) in
                    if granted && error == nil {
                        let event:EKEvent = EKEvent(eventStore: eventStore)

                        event.title = "My event: " + self.event.name
                        event.startDate = self.event.startTime
                        event.endDate = self.event.endTime
                        event.notes = self.event.description
                        event.calendar = eventStore.defaultCalendarForNewEvents

                        do {
                            try eventStore.saveEvent(event, span: .ThisEvent, commit: true)
                            self.dismissViewControllerAnimated(true, completion: {})
                        } catch {
                            self.dismissViewControllerAnimated(true, completion: {})
                        }
                    } else {
                        self.dismissViewControllerAnimated(true, completion: {})
                    }
                })
Run Code Online (Sandbox Code Playgroud)

ios ekevent ekeventstore swift swift2

9
推荐指数
1
解决办法
2849
查看次数

如何在后台iOS中应用时收听日历事件?

我编写了Android应用程序,用于侦听传入的Calendar事件,并在后台应用程序时触发我的流程.

现在我尝试为iOS做同样的事情.

我阅读了很多内容并运行了一些使用EKEventStore后台获取的演示.

然而,这种方法并不能满足我.

还有其他办法吗?

[编辑]

应用程序仅使用公共API.

谢谢,

ios ekeventstore

8
推荐指数
2
解决办法
1649
查看次数

将位置添加到EKEvent IOS日历

如何添加位置不仅仅是NSString而且还有纬度和经度,所以它在日历中也显示了一个地图?

<EKCalendarItem>  
Run Code Online (Sandbox Code Playgroud)

https://developer.apple.com/LIBRARY/ios/documentation/EventKit/Reference/EKCalendarItemClassRef/index.html#//apple_ref/occ/instp/EKCalendarItem/location

@property(nonatomic, copy) NSString *location;
Run Code Online (Sandbox Code Playgroud)

代码:

 EKEventStore *store = [[EKEventStore alloc] init];
[store requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error) {
    if (!granted) { return; }
    EKEvent *event = [EKEvent eventWithEventStore:store];
    event.title = @"Event Title";
    event.startDate = [NSDate date]; //today
    event.endDate = [event.startDate dateByAddingTimeInterval:60*60];  //set 1 hour meeting
    event.notes=@"Note";
    event.location=@"Eiffel Tower,Paris"; //how do i add Lat & long / CLLocation?
    event.URL=[NSURL  URLWithString:shareUrl];
    [event setCalendar:[store defaultCalendarForNewEvents]];
    NSError *err = nil;
    [store saveEvent:event span:EKSpanThisEvent commit:YES error:&err];
    NSString *savedEventId = event.eventIdentifier;  //this is …
Run Code Online (Sandbox Code Playgroud)

objective-c ios ekevent ekeventkit ekeventstore

8
推荐指数
2
解决办法
4203
查看次数