我试图使用基于doco和SimpleEKDemo应用程序的EventKit,但是我收到以下单个错误.
这个错误意味着什么以及建议采取哪些步骤进行故障排除(我第一次遇到这样的链接错误而且我有点丢失 - 我已经解析了我的代码而不是示例代码,我看不到任何错误明显的差异).
Undefined symbols:
"_OBJC_CLASS_$_EKEventStore", referenced from:
objc-class-ref-to-EKEventStore in AppointmentListController.o
ld: symbol(s) not found
collect2: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)
请注意,在控制器的头文件中我使用的事件包代码我有:
#import <EventKit/EventKit.h>
#import <EventKitUI/EventKitUI.h>
Run Code Online (Sandbox Code Playgroud) 我知道有一个用于以编程方式添加提醒的API.但是有提醒的视图控制器吗?我查看了EventKitUI框架,但我不确定是否EKEventEditViewController适用于提醒,或仅适用于日历项目.
像Apple一样为SMS,Mail,Calendars,Twitter,Facebook提供.
我EKEventEditViewController在我的应用程序中使用默认,我想自定义它,目前它显示默认的所有字段EKEventEditViewController,但我不想显示URL字段,也想添加时区字段.我可以这样做吗?如果是,那么请求我知道我该怎么做?

你如何接受EKEventiOS邀请?我知道Fantastical,Calendars 5和其他日历应用程序可以使用此功能,但我没有看到暴露的非只读属性来更改用户在事件方面的状态.知道怎么做吗?
谢谢,
我需要在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) 我目前正在iOS11b6工作,我的代码部分打开一个事件EKEventViewController并没有显示事件详细信息 - 它只显示'新事件','2001年1月1日','无标题日历'.
我的代码显示事件的部分如下(在iOS10中正常工作)
func openEvent() {
eventIdentifier = eventClipboardIdentifier
let eventViewController = EKEventViewController.init()
eventViewController.event = self.getEventFromEventClipboard()
print(eventViewController.event.title)
eventViewController.delegate = self
eventViewController.allowsCalendarPreview = false
eventViewController.allowsEditing = true
let navBar = UINavigationController(rootViewController: eventViewController)
print(eventViewController.event.title)
present(navBar, animated: true, completion: nil)
}
Run Code Online (Sandbox Code Playgroud)
我在Xcode调试器中遇到的错误如下.
2017-08-20 20:25:48.001329+1000 CalendarApp[1113:281191] *** -[__NSCFCalendar components:fromDate:]: date cannot be nil
Future exception.
A few of these errors are going to be reported with this complaint, then further violations will simply be ignored.
Here is the backtrace where this …Run Code Online (Sandbox Code Playgroud) 我正在开发一个日历应用程序,我正在努力为使用用户设备上的日历的功能创建测试.该
calendar: EKCalendar变量取自用户事件存储,因此当单元测试在XCode的模拟器上运行时,它们会因日历不存在而失败.使用我的个人设备工作但我们的构建服务器上的测试将失败.
测试使用用户日历/事件存储的函数/计算属性的好方法是什么?
///Return the user's name. If this hasn't been saved extract their name from their Enterprise calendar and save it.
static var name: String? {
if let savedName = defaults.string(forKey: "name") {
return savedName
}
// calendar is a specific EKCalendar members of my company will have.
guard let calendar = MeetingsFetcher().getUserEnterpriseCalendars().first,
let parsedName = calendar.title.firstMatch(from: Regex.organizerNameFromEKCalendar) else {
return nil
}
defaults.set(parsedName, forKey: "name")
return parsedName
}
func getEnterpriseCalendars() -> [EKCalendar]{
guard EKEventStore.authorizationStatus(for: .event) == …Run Code Online (Sandbox Code Playgroud) 我对EKCalendar的calendarIdentifier财产有疑问.此ID在全局级别或每个源级别上是唯一的吗?例如,我可以安全地将calendarIdentifier存储在我的应用程序中,以便在事件存储中的所有日历中顺利识别日历(无论他们在哪个EKSource中),还是还需要保存与日历相关联的EKSource标识符?
我的应用程序中有一个日历选择功能,我想在应用程序重启时安全地存储和加载正确的日历(在正确的帐户内).
提前致谢.
我在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
我想从我的应用程序创建一个提醒,所以我创建了一个提醒(EKReminder)并设置了一个警报:
NSTimeInterval timeInterval = 100000;
NSDate *alarmDate = [NSDate dateWithTimeIntervalSinceNow:timeInterval];
EKAlarm *alarm = [EKAlarm alarmWithAbsoluteDate:alarmDate];
[reminder setAlarms:@[alarm]];
Run Code Online (Sandbox Code Playgroud)
但我发现EKReminder上还有一个dueDateComponents属性.设置警报和dueDateComponents有什么区别?
还有一种方法可以创建一个警报:alarmWithRelativeOffset:(NSTimeInterval)offset但是文档说偏移参数可能是否定的,过去怎么可能发出警报?
eventkit ×10
ios ×8
objective-c ×3
swift ×3
calendar ×2
ekevent ×2
ekeventkit ×2
ios5 ×2
iphone ×2
unit-testing ×2
ios4 ×1
ios6 ×1
xcode ×1
xctest ×1