问题标签 [nspersistentcloudkitcontainer]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
91 浏览

ios - CoreData 到 PersistentCoudKitContainer 同步的延迟

我的 CoreData 与 iCloud 同步时遇到问题NSPersistentCloudKitContainer

同步有效,但是当我重新安装应用程序时,在应用程序启动和同步结束之间会有几秒钟的恼人延迟。我需要在启动时决定是创建新数据实体还是使用来自 iCloud 的“旧”数据。

如果有办法,我可以忍受延迟并等待同步完成

a) 在启动时确定 iCloud 中有要同步的数据,并且

b) 同步最终完成时收到通知

有谁知道实现这一目标的解决方案?设置 NSPersistentStoreRemoteChangeNotificationPostOptionKey并没有多大帮助,因为它在同步期间被触发了几次并且不提供任何状态信息。

0 投票
1 回答
269 浏览

core-data - SwiftUI CloudKit 公共数据库与 NSPersistentCloudKitContainer

基于 WWDC20 讨论如下: https ://developer.apple.com/videos/play/wwdc2020/10650/

在“一行代码”中使用 NSPersistentCloudKitContainer 设置 CloudKit 公共数据库的方法是:

在此处输入图像描述

在新的 SwiftUI Persistent.swift 模板上会有什么效果?

我尝试了下面的代码但没有用:

0 投票
2 回答
301 浏览

ios - CoreData 错误:必须在初始化期间提供获取请求

我的所有 CoreData UnitTests 都有以下代码设置(context我的viewContextItemCoreData 模型在哪里):

现在,我在声明时收到此错误deleteReq

必须在初始化期间提供获取请求 (NSInvalidArgumentException)

我这样设置我的控制器:

难道我做错了什么?

0 投票
1 回答
235 浏览

core-data - 使用公共数据库更改快速本地更新 CoreData+CloudKit

我的应用程序使用带有公共数据库的 CoreData+Cloudkit。
默认情况下,iCloud 与公共数据库的同步仅在启动时完成,然后每半小时完成一次。
由于我的应用程序需要更快的同步,所有用户都登录到 iCloud,并订阅了 iCloud 更改。因此,一个用户的 iCloud 修改会向所有其他用户发送通知。这行得通。

问题:

通知现在应该触发本地持久存储的更新,即 iCloud 插入或更新应该下载相应的 iCloud 记录,并将其插入或更新到持久存储中(不会发生删除)。

可能的解决方案:

  1. 我可以手动从 iCloud 下载记录,然后在托管上下文中插入或更新它。但是,插入将被视为新记录,并稍后作为副本上传到 iCloud。每个收到通知的用户都会有一个副本。虽然可以处理这样的欺骗(只有少数用户),但这并不那么优雅。

  2. 更好的是简单地触发重新镜像,因为无论如何都会在启动期间和每半小时完成一次。但我没有找到任何合理的方法来做到这一点。我发现了一个关闭和打开 iCloud 同步的建议(这应该会触发同步),但这给了我一个客户端错误(重新注册镜像代理)。我发现了另一个交换持久存储的建议(一个有 iCloud 镜像,一个没有),但在我看来,这对我的问题来说是一个可怕的黑客攻击。

我的问题:

使用 iCloud 更改更新本地存储的合理方法是什么?

0 投票
0 回答
211 浏览

core-data - 协调器中没有商店被配置为使用 CloudKit

在尝试运行时

我收到以下错误:

我正在使用 SwiftUI 在 iOS 上构建 CoreData/CloudKit 应用程序。

关于这个错误意味着什么的任何想法?提前致谢!

0 投票
1 回答
66 浏览

ios - NSPersistentCloudKitContainer 在首次应用启动时不返回任何数据

我正在尝试使用 CloudKit 将核心数据镜像到 iCloud。当我在模拟器上删除应用程序然后运行该应用程序时,该应用程序不显示任何数据。然后我再次运行它,这次它显示数据。我尝试了多次,第一次启动的结果一致显示没有数据,但第二次启动显示数据。

容器代码:

获取代码:

0 投票
1 回答
117 浏览

core-data - 让 NSPersistentCloudKitContainer 在设备之间同步的问题(SwiftUI、iOS)

我已经使用 NSPersistentCloudKitContainer 设置了我的核心数据模型:

当我使用 CoreData 和 CloudKit 创建一个新项目时,这几乎是 Xcode 呈现的标准内容。

呈现数据的视图由

我的设备之间的同步有点工作,但是当我将新数据输入一个设备时,需要 15 分钟以上才能显示在另一个设备上。不知道,有时直到我强制关闭应用程序并重新启动它才会到达。有时我必须在一台设备上输入数据并强制关闭才能查看其他设备的数据。

我启用了远程通知,我启用了 CloudKit 和我的容器。我已经用 CloudKit 仪表板检查了这些更改很快就会上传到云中。似乎它们并没有那么快地下载到设备上。

我还需要做什么才能使其正常工作?就像在一个设备中输入数据一样,不到一分钟它就会出现在另一台设备上。也许是后台服务?

0 投票
0 回答
88 浏览

xcode - 发布的 Mac Catalyst 应用程序使用了错误的 Core Data 数据库

我发布了一个使用 Core Data 和 NSPersistentCloudKitContainer 的 iOS + Mac Catalyst 应用程序。

对用户来说没有问题,但是从 Mac App Store 安装应用程序时对我来说出了点问题:它不仅使用开发数据库而不是生产数据库,而且还合并了两者(我认为它从本地存储加载了开发数据库并从 iCloud 导入产品)。

我曾经在 iOS 上也遇到过类似的问题,但很容易修复:删除 Xcode 或 TestFlight 安装的应用程序,然后通过 App Store 安装。

但是,我找不到 macOS 的解决方案。我已经删除了 ~/Library/Containers 中的应用程序文件夹,并从 /Applications 中删除了该应用程序,但是从 App Store 重新安装后,它又发生了。

我能做些什么来解决这个问题?

请注意,我找到了这个答案,但它并不完全相同 - 在我的情况下,发布的应用程序使用的是开发数据库而不是 macOS 上的生产数据库,所以我不能做“如果调试”的事情(除非我先可能清理所有内容并为下一个版本执行此操作?)。

0 投票
1 回答
200 浏览

swift - iCloud Sync 可以在 iPhone 和 Mac 上运行,但不能在 iPad 上运行

我发现 iCloud 同步有一个奇怪的问题。

情况:我使用 SwiftUI 开发了一个 iOS、iPadOS 和 macOS 应用程序。所有三个版本共享相同的代码库(macOS 版本是 Catalyst iPad 版本)。该项目确实支持通过 iCloud 同步NSPersistenceCloudKitContainer在所有 3 台设备之间同步数据。

问题: iCloud Sync 在我的 iPhone 和我的 Mac 之间完美运行,但是在我的 iPad 上使用它时,我遇到了一个非常奇怪的问题。在我的 iPad 上创建一个新的 CoreData 对象时,它会在几秒钟后出现在我的其他设备上,这完全没问题。但是,在我的 iPhone 或 Mac 上创建 CoreData 对象时,它不会出现在 iPad 上(我等了 10 分钟)。只有在关闭和重新打开应用程序时,才会出现对象。

详细信息:我什至不必完全退出应用程序。只需向上滑动到应用程序选择器并再次选择应用程序就足够了。

问题:有没有人有什么想法或什么可能导致这个奇怪的错误?请记住:所有三个设备都使用相同的代码库。

0 投票
1 回答
124 浏览

ios - 如何使用 NSPersistentCloudKitContainer(具有核心数据的 CloudKit)读取数组?

我在 CloudKit 上的核心数据/类型的实体中有 [String] 和 [Int] 属性,它们分别是字符串列表和 Int64 列表。我正在尝试通过 NSPersistentCloudKitContainer (公共服务器)同步它们。所有其他属性都正确同步,但这两个根本不同步。其他的很简单——字符串、日期、Int64/Int。我也想让它们同步。

它们都是可变形的,它们各自的自定义类设置为 [String] 和 [Int]。codegen 是 Manual/None,所以我可以创建展开的属性以供以后使用。

当我在第一次启动时运行该应用程序时,我也会获得带有他们数据的 CKRecord - 我的意思是我在下载记录信息中的调试中看到了他们的值。但是,当我检查 Core Data 时,它告诉我 nil。

我尝试设置 NSSecureUnarchiveFromData 和 NSSecureUnarchiveFromDataTransformerName,但没有成功。

我很清楚数组的数据是下载的,我不明白为什么 Core Data 不喜欢这些数组。