Я потратил часы на отслеживание этой ошибки.
Мое приложение должно удалить некоторые события, а затем добавить некоторые другие события. Это отлично работает с iCloud и локальными календарями. Однако с календарями Google это меняется.
То, что я заметил до сих пор:
- Иногда все работает отлично. Все события, которые следует удалить, удаляются, а все события, которые следует добавить, добавляются.
- Иногда кажется, что сначала все синхронизируется правильно, но через 2 минуты события удаляются.
- .remove работает лучше (95%), чем .save (50-80%).
- ошибок перехвата нет. Ни для .remove, ни для .save.
Кажется (?!), Что календари Google с небольшим количеством событий (внутри или вне предиката - не имеет значения) синхронизируются правильно. Календари Google с множеством событий (внутри или вне предиката) вызывают упомянутые проблемы с синхронизацией c.
Здесь фрагменты кода (на самом деле ничего особенного!):
let evenStore = EventStore()
let predicate = eventStore.predicateForEvents(withStart: predicateStartDate!,
end: predicateEndDate!,
calendars: selectedCalendarArray)
let events = eventStore.events(matching: predicate)
for event in events {
do {
try eventStore.remove(event, span: .thisEvent, commit: false)
} catch {
print("event remove catch error")
}
}
... (новые события создаются и сохраняются в eventsSave
)
for event in eventsSave {
do {
try eventStore.save(event, span: .thisEvent, commit: false)
} catch {
print("event save catch error")
}
}
do {
try eventStore.commit()
} catch {
print("commit catch error")
}
Я пытался избежать пакетного .remove
или .save
(true
iso false
- нет commit()
), безуспешно . Я добавил eventStore.reset()
. Безуспешно. Я добавил eventStore.refreshSourcesIfNecesary()
. Безуспешно.
Чего я действительно не понимаю, так это того, что iCloud работает на 100%. Календарь Google также является облачным календарем. Что заставляет его вести себя так иначе? Есть несколько сообщений о SO, но в основном они относятся к 2013-2016 гг. После этого уже практически ничего. Также никогда не было никакого решения solid, в лучшем случае некоторые обходные пути. Отсутствуют EKEvents при сохранении нескольких событий календаря Google Пакетное сохранение EKEvents в календаре Google, вызывающее потерю случайных событий
У меня сложилось впечатление, что что-то базовое c и очень простое просто отсутствует, но я не знаю, что это может быть ...
Любая помощь будет принята с благодарностью!
*** ОБНОВЛЕНИЕ (06.08.2020) ***
Некоторые события имеют географическое местоположение с помощью свойства X-APPLE-STRUCTURED-LOCATION
. Эти события вызывают .save
.
Error Domain=EKErrorDomain Code=19 "Locations with geo information are not supported by this account." UserInfo={NSLocalizedDescription=Locations with geo information are not supported by this account.}
Может ли эта ошибка быть связана с проблемой синхронизации темы c?