IOS SWIFT开发系列–为什么对临时变量修改可以同步到icloud?

以下示例代码,展示了如何将数据保存到 Core Data 并同步到 CloudKit:

import CoreData
import CloudKit

func saveCloudItem(Content: String, Date: Date) { //传入待同步到云端iCloud的参数数据
let context = persistentContainer.viewContext
let newItem = CD_Item(context: context)
newItem.Content = Content
newItem.Date = Date as NSDate
newItem.timestamp = Date()

do {
    try context.save()
    print("Item saved successfully.")
} catch {
    let nsError = error as NSError
    print("Failed to save item: \(nsError), \(nsError.userInfo)")
    fatalError("Unresolved error \(nsError), \(nsError.userInfo)")
}

}

// 在 AppDelegate 或其他适当的地方设置 persistentContainer
lazy var persistentContainer: NSPersistentContainer = {
let container = NSPersistentContainer(name: "你的数据模型名")

// 设置 CloudKit 选项
if let description = container.persistentStoreDescriptions.first {
    description.setOption(true as NSNumber, forKey: NSPersistentHistoryTrackingKey)
    description.setOption(true as NSNumber, forKey: NSInferMappingModelAutomaticallyOption)
    description.setOption(true as NSNumber, forKey: NSMigratePersistentStoresAutomaticallyOption)

    let options = NSPersistentCloudKitContainerOptions(containerIdentifier: "你的容器名")
    options.databaseScope = .private
    description.cloudKitContainerOptions = options
}

container.loadPersistentStores { (storeDescription, error) in
    if let error = error as NSError? {
        fatalError("Unresolved error \(error), \(error.userInfo)")
    }
}
return container

}()
为什么newItem 只是一个临时变量,修改它,会影响context?实现同步icloud

在你的 saveCloudItem 函数中,newItem 是一个临时变量,但它实际上是一个 NSManagedObject 的实例,它被添加到了 Core Data 的上下文(context)中。当你创建一个新的 CD_Item 对象并将其与 context 关联时,这个对象就成为了持久化存储的一部分,并且对它的任何修改都会被记录在 context 中。

Core Data 上下文:
NSManagedObjectContext 是 Core Data 的核心对象之一,它管理一组 NSManagedObject 实例。
当你使用 let newItem = CD_Item(context: context) 创建一个新的 CD_Item 对象时,这个对象就被注册到了 context 中。
一旦 newItem 被注册到 context,对 newItem 的任何修改都会被 context 记录下来,等待保存操作来提交这些更改。

当你调用 context.save() 时,context 会将所有未提交的更改(包括新创建的对象、更新的对象和删除的对象)保存到持久化存储中。
如果启用了 CloudKit 集成,这些更改还会被同步到 iCloud。

———具体流程

1.创建新对象并注册到上下文:

let newItem = CD_Item(context: context)

设置属性:
newItem.Content = Content
newItem.Date = Date as NSDate
newItem.timestamp = Date()

2.保存上下文:

do {
try context.save()
print(“Item saved successfully.”)
} catch {
let nsError = error as NSError
print(“Failed to save item: (nsError), (nsError.userInfo)”)
fatalError(“Unresolved error (nsError), (nsError.userInfo)”)
}
在这个过程中,newItem 虽然是一个临时变量,但它实际上是 context 管理的一个 NSManagedObject。对 newItem 的任何修改都会被 context 记录,并在 context.save() 时提交到持久化存储。

Core Data 与 CloudKit 集成:
在 persistentContainer 中设置了 CloudKit 选项,Core Data 会自动处理本地数据和 iCloud 之间的同步。
任何对 context 的更改(如添加、更新或删除对象)都会被记录,并通过 CloudKit 同步到 iCloud。

IOS SWIFT开发系列–为什么对临时变量修改可以同步到icloud?

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

Scroll to top