У меня есть приложение Core data iOS, которое использует Cloudkit с использованием NSPersistentCloudkitContainer - iOS 13 и далее. Я проверил это на iPad и iPhone, и syn c работает хорошо. Сейчас я попытался добавить Cloudkit к аналогичному приложению Ma c, используя тот же контейнер Cloudkit (все еще в разработке). Опять же, это работает в отношении синхронизации, но довольно часто добавление / удаление объектов на iPad приводит к cra sh на Ma c, как показано ниже:
** libxp c .dylib` ___ xpc_activity_dispatch_block_invoke.109.cold.3:
0x7fff70a14423 <+0>: pushq %rbp
0x7fff70a14424 <+1>: movq %rsp, %rbp
0x7fff70a14427 <+4>: xorl %edi, %edi
0x7fff70a14429 <+6>: callq 0x7fff70a144d8 ; symbol stub for: _os_assert_log
0x7fff70a1442e <+11>: movq %rax, %rdi
0x7fff70a14431 <+14>: callq 0x7fff70a144ea ; symbol stub for: _os_crash
-> 0x7fff70a14436 <+19>: ud2 **
Стек вызовов показывает: ![Call Stack](https://i.stack.imgur.com/Dg8EL.jpg)
Я использую NSFetchedResultsControllerDelegate, с некоторой отладкой в didChange fun c. Иногда я вижу проблему перед cra sh, например, когда он говорит, что собирается вставить объект в строку 6, когда в самой таблице всего 4 строки. Я не всегда получаю такое сообщение.
В FetchedResultsControllerDelegate didChange я помещаю отладку в часть .delete коммутатора. Я видел такие вещи, как попытка удалить пункт 8, когда в таблице только 7. Я не позволю этому сделать это, но в итоге я не удаляю нужный элемент. Похоже, что запросы на изменение CloudKit поступают в «неправильном» порядке ??
Пожалуйста, кто-нибудь может подсказать, как я мог go отладить это? Спасибо.