Я потратил часы, чтобы отследить эту ошибку.
Мое приложение должно удалить некоторые события, а затем добавить некоторые другие события. Это отлично работает с iCloud и локальными календарями. Однако с календарями Google это меняется.
Что я заметил до сих пор:
- Иногда все работает идеально. Все события, которые должны быть удалены, удаляются, а все события, которые должны быть добавлены, добавляются.
- Иногда поначалу вроде все нормально синхронизируется, но через 2 минуты события удаляются.
- .remove работает лучше (95%), чем .save (50-80%).
- ошибок захвата нет. Ни для .remove, ни для .save.
Кажется (?!), что календари Google с небольшим количеством событий (внутри или вне предиката - не имеет значения) синхронизируются правильно. Календари Google со многими событиями (внутри или вне предиката) вызывают упомянутые проблемы синхронизации.
Вот выдержки из кода (на самом деле ничего особенного!):
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
i.s.o. false
- нет commit()
), безуспешно.
Я добавил eventStore.reset()
. Безуспешно.
Я добавил eventStore.refreshSourcesIfNecesary()
. Нет успеха.
Чего я действительно не понимаю, так это того, что iCloud работает на 100%. Календарь Google также является облачным календарем. Что заставляет его вести себя так по-другому? На SO есть несколько сообщений, но в основном они относятся к 2013-2016 годам. После этого уже практически ничего. Также никогда не бывает надежного решения, в лучшем случае некоторые обходные пути. >Отсутствует EKEvents при сохранении нескольких событий календаря Google
Пакетное сохранение событий EKEevents в календаре Google, что приводит к потере случайных событий
У меня сложилось впечатление, что чего-то простого и очень простого просто не хватает, но я понятия не имею, что это может быть...
Любая помощь приветствуется!
*** ОБНОВЛЕНИЕ (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.}
Может ли эта ошибка быть связана с проблемой синхронизации темы?