我正在更新 iOS13 之前的 Core Data 应用程序,以使用 Core Data+CloudKit 同步来支持多个设备上的单个用户。同步应该自动发生,并且在我开发的中间步骤中它确实起作用了。现在它不起作用,CloudKit 遥测没有注册任何活动,我不明白为什么它不起作用。
在我以前的应用程序版本中,我在 UserDefaults 中提供了少量标签字符串,并允许用户修改它们,并将更新的版本放回 UserDefaults 中。这是避免为少量对象管理第二个核心数据实体的捷径。
我后来意识到这在多设备实现中不起作用,因为本地核心数据数据库为空这一事实不再意味着它是该用户的第一次使用。相反,每个新设备都需要查找基于云的数据源来查找用户正在使用的标签字符串,并且仅在用户没有其他内容时才使用应用程序提供的默认值。
我按照 Apple 的说明使用 CloudKit 设置核心数据,起初同步工作正常。但后来我意识到同步行为不正确,我真的需要提供一个预填充的核心数据数据库(.sqlite 文件),而不是从 UserDefaults 中存储的字符串进行预填充。我实现了这一点,并且在首次本地启动时复制捆绑的 .sqlite 文件后,该应用程序现在可以在本地正常运行。
但由于某种原因,此更改导致 CloudKit 同步停止工作。现在,我不仅在其他设备上没有获得任何自动更新,而且在 CloudKit 仪表板遥测中也没有得到任何结果,因此看来 CloudKit 同步从未开始。这很奇怪,因为我在本地收到刚刚在本地发生的“远程”更改的通知(当我在本地保存新数据时,我列为通知的 #selector 的函数正在本地调用)。
我对问题/解决方案是什么感到困惑。这是我的相关代码。
//In my CoreDataHelper class
lazy var context = persistentContainer.viewContext
lazy var persistentContainer: NSPersistentCloudKitContainer = {
let appName = Bundle.main.infoDictionary!["CFBundleName"] as! String
let container = NSPersistentCloudKitContainer(name: appName)
//Pre-load my default Core Data data (Category names) on first launch
let storeUrl = FileManager.default.urls(for: .applicationSupportDirectory, …Run Code Online (Sandbox Code Playgroud) 我正在更新一个在 Xcode 10 上编译并在 iOS 13 上正常运行的应用程序。我想进行一些更改,因此在 Xcode 11 上重新编译,但现在 barTintColor 出现问题。
如果“大标题”设置为“始终”,则不会应用我的自定义 barTintColor - 我只会获得默认的灰色。如果“大标题”设置为“从不”,我的自定义 barTintColor 将按预期应用。如果“大标题”设置为“自动”,则显示大标题时导航栏默认为灰色,显示小标题时导航栏为我的自定义颜色。例如,当我的导航栏下方的TableView被向上推时,默认的大标题切换为小标题,并且我的导航栏改变颜色。正常行为是它始终是我的自定义颜色。
我的 ViewController 类中的相关代码,最后一行是设置 barTintColor 的代码:
override func viewDidLoad() {
super.viewDidLoad()
setDelegates()
setTableViewHeightForCollapsingHeaders()
setNavigtionBarItems()
doSplitViewManagement()
}
override func viewWillAppear(_ animated: Bool) {
clearsSelectionOnViewWillAppear = splitViewController!.isCollapsed
super.viewWillAppear(animated)
updateUI()
}
fileprivate func setNavigtionBarItems() {
//set up UI buttons
navigationItem.leftBarButtonItem = editButtonItem
let addButton = UIBarButtonItem(barButtonSystemItem: .add, target: self, action: #selector(insertNewObject(_:)))
navigationItem.rightBarButtonItem = addButton
navigationController?.navigationBar.barTintColor = UIColor(hex: 0x5da0a2)
}
Run Code Online (Sandbox Code Playgroud)
知道行为发生变化的原因以及如何解决吗?