标签: ekeventkit

EventKit单元测试 - 在主线程上停止

我需要在Xcode中为Unit Test创建多个日历事件.由于访问权限请求,呼叫需要是异步的:

 eventStore.requestAccess(to: EKEntityType.event, completion: {
            granted, error in
             //create events
     })
Run Code Online (Sandbox Code Playgroud)

这是在setUp()循环中完成的,以创建多个事件.问题是,当测试开始运行时,并非所有完成块都已完成.我已实施该waitForExpectations()方法,使其等到计数器满足要求.但是我收到以下错误消息:

Stall on main thread
Run Code Online (Sandbox Code Playgroud)

这是相关的代码 - setUp:

override func setUp()
{

    super.setUp()

    if let filepath = Bundle.main.path(forResource: "MasterCalendar", ofType: "csv") {
        do {

            let expectationCreation = expectation(description: "create events expectation")
            let contents = try String(contentsOfFile: filepath)
            //print(contents)

            let testDataArray = importTestDataArrayFrom(file: contents)



            createTestEvents(testDataArray: testDataArray)
                { (eventsArray) in
                    self.testEvents = eventsArray
                    print("finished creating events")
                    expectationCreation.fulfill()
            }

            waitForExpectations(timeout: 10.0) { (error) in
                if error != …
Run Code Online (Sandbox Code Playgroud)

xcode unit-testing eventkit ekeventkit swift

7
推荐指数
0
解决办法
293
查看次数

如何使用eventKit框架为特定日期设置提醒(警报)

我在iOS 5中使用EventKit框架,并使用以下代码成功地将事件添加到iOS日历中

EKEventStore *eventDB = [[EKEventStore alloc] init];

    EKEvent *myEvent  = [EKEvent eventWithEventStore:eventDB];

    myEvent.title     = @"New Event";
    myEvent.startDate = [[NSDate alloc] init];
    myEvent.endDate   = [[NSDate alloc] init];
    myEvent.allDay = YES;

    [myEvent setCalendar:[eventDB defaultCalendarForNewEvents]];
Run Code Online (Sandbox Code Playgroud)

现在如何为此活动添加警报(提醒)?

谢谢Ranjit

ios4 ios eventkit ios5 ekeventkit

6
推荐指数
1
解决办法
6190
查看次数

在iOS中添加新事件之前检查重复项目 - EKEventStore

我是iOS编程的新手,我正在开发一个简单的项目,列出给定城市的假期,并让用户能够将这些事件添加到iCal默认日历中.

问题是:如何检查用户日历中是否已存在具有相同属性(例如标题和开始日期)的事件.如果多次按下操作按钮(用于向iCal添加事件),则可能发生这种情况.在这种情况下,我不希望在iCal中创建两个或更多相同的事件.

我曾试图使用NSPredicate,但我完全迷失了如何对它进行排序.

任何帮助都会受到赞赏!提前致谢.

贝娄是我的事件添加代码,只是为了让事情变得清晰.在这种情况下,用户正在从列表中添加多个事件(例如,所有本地假日).

for (int i = 0; i<[allHolidayNames count]; ++i) {

    // ------ EVENT MANIPULATION ------

    EKEventStore *eventStore = [[EKEventStore alloc] init];
    EKEvent *addEvent = [EKEvent eventWithEventStore:eventStore];
    addEvent.title = [allHolidayNames objectAtIndex:i];
    addEvent.startDate = [allHolidayDates objectAtIndex:i];
    addEvent.allDay = YES;
    [addEvent setCalendar:[eventStore defaultCalendarForNewEvents]];
    [eventStore saveEvent:addEvent span:EKSpanThisEvent commit:YES error:nil];
}   
Run Code Online (Sandbox Code Playgroud)

cocoa-touch objective-c ios5 ekeventkit

6
推荐指数
1
解决办法
4350
查看次数

将参与者添加到iOS中的活动

在EKParticipant类参考中,"将与会者发送到EKEvent对象以获取EKParticipant对象的数组."好的,购买如何将与会者发送到EKEvent对象?

有人给出示例代码吗?

iphone ios eventkit ekevent ekeventkit

6
推荐指数
1
解决办法
3122
查看次数

更改日历隐私时,iOS 7应用程序崩溃

我有一个应用程序使用事件工具包来将某些事件与iOS日历同步.这有效,但有一个例外.如果应用程序处于后台/暂停且日历的隐私设置已更改(设置>隐私>日历>我的应用程序),则应用程序崩溃.即使使用EkEventKit的类尚未使用,也会发生这种情况

到目前为止,我只在iOS模拟器中运行它,但Xcode只提供了应用程序发送给SIGKILL的有用信息.

有人可能会建议可能导致这种情况或我如何能够找到的东西

xcode cocoa-touch ios-simulator ekeventkit ios7

6
推荐指数
1
解决办法
2083
查看次数

如何在 iOS 中更新或编辑 EKEvent 并使用标识符存储在本机日历中?

我在我的应用程序中使用 EKEvent 来获取所有商店事件,我想通过标识符编辑任何特定事件并重新保存在现有的..那么我应该怎么做?

EKEventStore *store = [EKEventStore new];
    EKEvent *event = [EKEvent eventWithEventStore:store];

    event.title = @"abc";
    event.notes= @"this is updated notes";

    event.calendar = [store defaultCalendarForNewEvents];
    NSError *err = nil;

    [store saveEvent:event span:EKSpanThisEvent commit:YES error:&err];
Run Code Online (Sandbox Code Playgroud)

这段代码用于我用来存储事件,但是在哪里传递标识符以仅更新特定事件?

iphone ios ekevent ekeventkit ekeventstore

6
推荐指数
1
解决办法
4771
查看次数

设置EKEventEditViewController的背景颜色/图像

以下是我添加日历事件的代码.我想为EKEventEditViewController发送一个背景图片.我找到了这段代码

UITableView *eventTableView = [[editController.view subviews]objectAtIndex:0]; 
Run Code Online (Sandbox Code Playgroud)

使用此代码,我能够为EKEventViewController设置背景图像,但它不适用于EKEventEditViewController.任何帮助是极大的赞赏.提前致谢.

     EKEventEditViewController *editController = [[EKEventEditViewController alloc] init];
//    UITableView *eventTableView = [[editController.view subviews]objectAtIndex:0];
//    [eventTableView setHidden:YES];

//    [eventTableView setBackgroundColor:[UIColor redColor]];
NSMutableArray *allViewControllers = [NSMutableArray arrayWithArray: editController.viewControllers];
NSLog(@"%i", [allViewControllers count]);
 UITableView *eventTableView = [[[allViewControllers objectAtIndex:0] subviews] objectAtIndex:0];
//    UITableView *eventTableView = [[editController.view subviews]objectAtIndex:0];
//    eventTableView.backgroundColor = [UIColor redColor];
UIColor *background = [[UIColor alloc] initWithPatternImage:[UIImage imageNamed:@"honeycomb.png"]];
eventTableView.backgroundColor = background;
//    [background release];
editController.event =  [eventsList objectAtIndex:indexPath.row];
editController.eventStore = self.eventStore;
editController.editViewDelegate = self;
itsSelectedReminder = indexPath.row;
isReminderDeleted …
Run Code Online (Sandbox Code Playgroud)

iphone calendar ekeventkit

5
推荐指数
1
解决办法
2254
查看次数

iOS EKEvent Store在循环中重新创建iCloud日历,不会保存本地.

我有一个奇怪的问题EKEventStore,iCloud和本地日历.如果启用了iCloud,则会创建日历并将事件保存到日历中,如您所料.如果iCloud关闭并且您尝试保存事件没有任何反应,则设备会每隔3-5秒继续创建一个循环中的iCloud日历,直到iCloud重新打开,然后所有这些日历都会作为重复内容涌入iCloud.我正在使用几乎所有在这里引用的确切代码以及Apples Docs.我完全难以理解为什么它不起作用,而且一般来说EKEventStore上的文档似乎很少.

//••••••••••••••••••••••••••••••••••••••• pragma mark - 保存事件//•••••••••••••••••••••••••••••••••••••••••• ••••

-(void)saveEventWithDate:(NSDate *)startDate endDate:(NSDate *)endDate
{
    AppData *theData = [self theAppData];

    if([self checkIsDeviceVersionHigherThanRequiredVersion:@"6.0"]) {
        [eventStore requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error) { // iOS 6 Support

            if (granted){
                NSLog(@"Access Granted");
            } else {
                NSLog(@"Access Not Granted");
            }

        }];
    }

    EKEvent *event  = [EKEvent eventWithEventStore:eventStore];

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

    if ([eventStore calendarWithIdentifier:[defaults objectForKey:@"My Calendar"]] != nil) // Calendar Existed
    {
        event.calendar  = [eventStore calendarWithIdentifier:[defaults objectForKey:@"My Calendar"]];
        NSLog(@"Calendar Existed");

    } else { // Create Calendar …
Run Code Online (Sandbox Code Playgroud)

ios ekeventkit ekeventstore

5
推荐指数
2
解决办法
4467
查看次数

如何在将来的日期中获取特定的周期性EKEvent?

我将重复事件(EKEvent)写入了Calendar。如何在特定日期获取和修改这些重复事件之一?

这些事件是通过以下代码创建的:

+ (void) writeTestEvent{

    EKEventStore *eventStore = [[EKEventStore alloc] init];
    EKEvent *event = [EKEvent eventWithEventStore:eventStore];

    event.calendar = [eventStore defaultCalendarForNewEvents];
    event.title = @"Hello World!";
    event.startDate = [NSDate date];
    event.endDate = [NSDate date];

    EKRecurrenceRule *recurrenceRule = [[EKRecurrenceRule alloc] initRecurrenceWithFrequency:EKRecurrenceFrequencyDaily interval:1 end:nil];
    [event addRecurrenceRule:recurrenceRule];

    [eventStore requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error) {
        if (granted) {
            BOOL isSaved = [eventStore saveEvent:event span:EKSpanFutureEvents commit:YES error:&error];
            NSLog(@"isSaved: (%d) with error: %@", isSaved, error);
        } else {
            NSLog(@"not granted with error: %@", error);
        }
    }];
}
Run Code Online (Sandbox Code Playgroud)

-predicateForEventsWithStartDate:endDate:calendars: …

ekevent ekeventkit ekeventstore

5
推荐指数
1
解决办法
1702
查看次数

在ios中创建包含复杂规则的提醒

我想创建一个带有复杂规则的重复提醒,即

  1. 提醒将有开始日期和结束日期.
  2. 提醒将仅在特定的工作日重复.
  3. 在开始日期和结束日期之间的选定日期,它们将在特定时间发生.


- (id)initRecurrenceWithFrequency:(EKRecurrenceFrequency)type interval:(NSInteger)interval daysOfTheWeek:(NSArray *)days daysOfTheMonth:(NSArray *)monthDays monthsOfTheYear:(NSArray *)months weeksOfTheYear:(NSArray *)weeksOfTheYear daysOfTheYear:(NSArray *)daysOfTheYear setPositions:(NSArray *)setPositions end:(EKRecurrenceEnd *)end
Run Code Online (Sandbox Code Playgroud)

似乎很接近,但据我所知,我认为我将不得不使用一系列事件.

我需要指向创建提醒的方向,这些提醒发生在一天的特定时间 - >特定的一周 - >在特定的开始日期和结束日期内

谢谢

编辑

我已经尝试过以下事情并且遇到了一些问题取得了一些成功

EKEvent *event = [EKEvent eventWithEventStore:kEVENTSTORE_SINGLTON];
    event.title = @"Event Title test";
    event.notes= @"Hope this one displays";
    NSArray* rulesArray = [event recurrenceRules];
    for (EKRecurrenceRule* rule in rulesArray) [event removeRecurrenceRule:rule];

    event.startDate = [NSDate date]; //today
    event.endDate = [event.startDate dateByAddingTimeInterval:60*60];  //set 1 hour meeting
    [event setCalendar:[kEVENTSTORE_SINGLTON defaultCalendarForNewEvents]];



    NSDate *date = [NSDate date];
    EKAlarm …
Run Code Online (Sandbox Code Playgroud)

ios eventkit ekeventkit

5
推荐指数
0
解决办法
791
查看次数