世博会 - 创建日历缺少源
Posted
技术标签:
【中文标题】世博会 - 创建日历缺少源【英文标题】:Expo - creating calendar is missing source 【发布时间】:2019-08-03 11:56:59 【问题描述】:尝试在 ios 上创建日历时,我得到:
Calendar 'My Calendar' could not be saved: Error Domain=EKErrorDomain
Code=14 "Calendar has no source" UserInfo=
NSLocalizedDescription=Calendar has no source
我的日历配置如下:
"allowsModications": true,
"color": "yellow",
"entityType": "event",
"source":
"id": "220e5c20-eee3-406a-b1e0-cbd59b06ce66",
"name": "workout-scheduler",
"type": "local",
,
"sourceId": "220e5c20-eee3-406a-b1e0-cbd59b06ce66",
"title": "My Calendar",
"type": "local",
我的项目正在运行
"expo": "^34.0.0",
"expo-calendar": "~6.0.0"
【问题讨论】:
您是否在物理设备上使用此测试? 是的,尝试过,物理设备和模拟器。两者的结果相同 您是在 Expo 的形式上发布的吗?我想在那里问会很快。 我加入了expo slack频道,看看能不能得到一些见解 它会帮助你,因为管理世博会的经理有一个答案。 【参考方案1】:因此,对于好奇的人或可能会发现自己遇到此类问题的人,您应该知道,虽然 android 允许使用 iOS 不允许的几乎任何值来定义源。
所以我所做的是,在创建日历时,我首先获取现有日历并选择第一个具有caldav
类型源的日历 - 该标准由 iCloud 使用,因此它将出现在设备上。获得该日历后,我会从他那里获取源 ID,并将其设置为我的应用程序日历的源 ID。
let iOsCalendarConfig =
title: "Workout Events",
color: '#4B968A',
entityType: Calendar.EntityTypes.EVENT,
const getEventsCalendars = () =>
return Calendar.getCalendarsAsync(Calendar.EntityTypes.EVENT)
export const createCalendar = async (gymConfig) =>
let osConfig;
switch (Platform.OS)
case "ios":
const calendars = await getEventsCalendars()
const caldavCalendar = calendars.find(calendar => calendar.source.type == "caldav")
osConfig = iOsCalendarConfig;
// Sources can't be made up on iOS. We find the first one of type caldav (most common internet standard)
osConfig.sourceId = caldavCalendar.source.id
break;
case "android":
...
break;
default:
return Calendar.createCalendarAsync(osConfig)
尽管这可行,但我意识到,例如,我无法像在 Android 上那样在 iOS 上创建本地日历;这让我觉得这个日历主题还有更多需要挖掘。
【讨论】:
你有没有想过这个问题?我正在尝试创建一个日历并正在做与此相同的事情,但即使使用正确的 sourceID,我仍然收到我没有来源的错误。以上是关于世博会 - 创建日历缺少源的主要内容,如果未能解决你的问题,请参考以下文章