我需要在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) 我在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
我是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) 在EKParticipant类参考中,"将与会者发送到EKEvent对象以获取EKParticipant对象的数组."好的,购买如何将与会者发送到EKEvent对象?
有人给出示例代码吗?
我有一个应用程序使用事件工具包来将某些事件与iOS日历同步.这有效,但有一个例外.如果应用程序处于后台/暂停且日历的隐私设置已更改(设置>隐私>日历>我的应用程序),则应用程序崩溃.即使使用EkEventKit的类尚未使用,也会发生这种情况
到目前为止,我只在iOS模拟器中运行它,但Xcode只提供了应用程序发送给SIGKILL的有用信息.
有人可能会建议可能导致这种情况或我如何能够找到的东西
我在我的应用程序中使用 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)
这段代码用于我用来存储事件,但是在哪里传递标识符以仅更新特定事件?
以下是我添加日历事件的代码.我想为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) 我有一个奇怪的问题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) 我将重复事件(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: …
我想创建一个带有复杂规则的重复提醒,即
- (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) ekeventkit ×10
ios ×5
eventkit ×4
ekevent ×3
ekeventstore ×3
iphone ×3
cocoa-touch ×2
ios5 ×2
xcode ×2
calendar ×1
ios4 ×1
ios7 ×1
objective-c ×1
swift ×1
unit-testing ×1