Интеграция Core Data + CloudKit, сбой синхронизации больших двоичных файлов

Атрибут модели Core Data с типом binary и включенным параметром «Разрешить внешнее хранилище» вызывает сбой в механизме синхронизации NSPersistentCloudKitContainer.

Это происходит только на принимающем устройстве, то есть загрузка в CloudKit прошла успешно, но загрузка из CloudKit вызывает сбой в NSManagedContext.

<NSSQLSaveChangesRequestContext: 0x281ec8420> , *** NSAllocateMemoryPages(28317598) failed with userInfo of (null)

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** NSAllocateMemoryPages(30318498) failed

Очевидно, это сбой памяти, но я не могу понять, как это исправить, похоже, это ошибка iOS.


person Alexandr Mazanov    schedule 19.10.2019    source источник
comment
Я предполагаю, что это не ошибка, и вы просто перегружаете систему. Прочтите это, это может помочь ... blog.five.agency/   -  person andrewbuilder    schedule 21.10.2019
comment
... а в Apple Docs указано, что процесс выделить новый блок памяти не удалось.   -  person andrewbuilder    schedule 21.10.2019
comment
@andrewbuilder Я понимаю, что сбой возникает во время выделения памяти, более того, я знаю, что он пытается выделить память специально для двоичного атрибута (точный размер от байта к байту). Я не понимаю, почему он это делает? Мои ожидания относительно того, как это должно работать: 1) Я создаю двоичный атрибут и разрешаю внешнее хранилище, то есть для больших значений в основных данных хранится файл + ссылка на файл 2) CloudKit Stores - это как CKAsset 3) Ни в какой момент во время синхронизации эти данные надо поднять в память ...   -  person Alexandr Mazanov    schedule 22.10.2019


Ответы (1)


Ты не одинок! Это не то, что вы делаете неправильно, если вы отключите параметр «Разрешить внешнее хранилище» (и удалите приложение со своего устройства, чтобы избежать сбоя миграции), синхронизация будет выполнена нормально. Очевидно, что что-то не так с опцией Разрешить внешнее хранилище и файлами размером более нескольких МБ.

В моем приложении я синхронизировал изображения PNG. Те, кто был больше ~ 28 МБ (если я правильно помню размер), не могли синхронизироваться с устройством и приводили к сбою.

Я отправил отчет об ошибке с помощью Feedback Assistant, и Apple впервые запросила более подробную информацию. Я отправляю им образец приложения.

Изменить: хорошие новости, ребята! Apple пометила мой отчет об ошибке с указанием потенциального исправления - для будущего обновления ОС. Я проверю бета-версию Xcode 12, если она исправлена, и сообщу об этом.

Изменить 2: для iOS 14 и Xcode 12 ошибка исправлена! Ура! ????

person Nikos Polychronakis    schedule 16.05.2020
comment
Я тоже сообщил об этом в Apple, но так и не получил ответа :) В моем случае я отключил параметр «Разрешить внешнее хранилище», и, на удивление (!), Он работает нормально. Мне не нравится раздутая база данных, но, по крайней мере, она не дает сбоев. - person Alexandr Mazanov; 17.05.2020
comment
Также столкнулся с этим падением с pdf 26 мб. Отключение Разрешить Внешнее Хранилище устранило это, но мне интересно, какое снижение производительности это имеет. - person Bret; 26.06.2020
comment
Привет, Никос, как дела? Apple устранила эту проблему в Xcode 12? - person francisfeng; 27.08.2020
comment
@francisfeng для Xcode 12 beta 6, к сожалению, это не исправлено. Я не пробовал это с бета-версией iOS 14 на реальном устройстве. - person Nikos Polychronakis; 27.08.2020
comment
Я думал, что это было исправлено в iOS 14. Но я столкнулся с той же проблемой, когда размер файла достиг 100 МБ. Просто расстроен. - person francisfeng; 31.03.2021
comment
Я действительно пробовал это с iOS 14, после того, как Apple ответила, что исправила это, и все заработало. Может обновление опять сломало. Помощник по обратной связи, мой старый друг ... - person Nikos Polychronakis; 31.03.2021