【问题标题】:Core Data + CloudKit integration, large binary files sync crashCore Data + CloudKit 集成,大二进制文件同步崩溃
【发布时间】:2020-02-16 06:24:51
【问题描述】:

具有二进制类型和启用“允许外部存储”的核心数据模型属性会导致 NSPersistentCloudKitContainer 同步机制崩溃。

这仅在接收设备上发生,这意味着上传到 CloudKit 是成功的,但是在 NSManagedContext 中从 CloudKit 下载会导致崩溃。

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

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

这显然是内存崩溃,但我不知道如何解决它,这似乎是一个 iOS 错误。

【问题讨论】:

  • 我的猜测是这不是一个错误,你只是在超载系统。阅读本文,它可能会有所帮助...blog.five.agency/…
  • ...和Apple Docs 表示分配新内存块的进程失败。
  • @andrewbuilder 我知道崩溃是在内存分配期间引起的,我知道它试图专门为二进制属性分配内存(精确大小字节到字节)。我不明白它为什么这样做?我对它应该如何工作的期望:1)我创建了一个二进制属性并允许外部存储,即对于大值核心数据存储一个文件+对文件的引用 2)CloudKit 存储与 CKAsset 一样 3)在同步期间,此数据绝不会应该被提升到记忆中……

标签: core-data cloudkit ios13 nspersistentcloudkitcontainer


【解决方案1】:

你并不孤单! 这不是您做错的事情,如果您禁用“允许外部存储”选项(并从设备中删除应用程序以避免迁移崩溃),它将正常同步。 显然,“允许外部存储”选项有问题,文件大于几 mb。

在我的应用程序中,我正在同步 png 图像。那些大于~28mb(如果我能正确记起大小的话)的人无法同步到设备并使其崩溃。

我使用反馈助手提交了一份错误报告,Apple 首次要求提供更多详细信息。我向他们发送了一个示例应用程序。

编辑: 好消息,伙计们! Apple 将我的错误报告标记为“确定的潜在修复 - 用于未来的操作系统更新”。 我会检查 Xcode 12 beta 是否已修复并报告。

编辑 2:对于 iOS 14 和 Xcode 12,该错误已修复!耶! ?

【讨论】:

  • 我也向 Apple 报告过,但从未收到回音 :) 就我而言,作为一种变通方法,我禁用了“允许外部存储”,令人惊讶的是(!)它运行良好.我不喜欢臃肿的数据库,但是,嘿,至少它不会崩溃。
  • 也遇到了 26 mb pdf 的崩溃。禁用“允许外部存储”修复了它,但我想知道它有什么性能损失。
  • 嗨 Nikos,现在怎么样了? Apple 是否在 Xcode 12 中解决了这个问题?
  • @francisfeng for Xcode 12 beta 6,不幸的是它没有修复。我还没有在真实设备上使用 iOS 14 beta 进行过尝试。
  • 我认为它已在 iOS 14 中修复。但是一旦文件达到 100MB,我就会遇到同样的问题。只是沮丧。
猜你喜欢
  • 2021-07-19
  • 1970-01-01
  • 2012-05-02
  • 2022-07-03
  • 1970-01-01
  • 1970-01-01
  • 2016-10-27
  • 1970-01-01
  • 2020-11-02
相关资源
最近更新 更多