CloudKit快速入门之02 通过保存记录创建数据库架构 (SwiftUI iCloud CloudKit中文文档手册教程)

通过保存记录创建数据库架构

在开发过程中,使用CloudKit API创建架构很容易。将记录对象保存到数据库时,将自动为您创建关联的记录类型及其字段。此功能称为即时模式,仅当您使用开发环境(商店中出售的应用程序无法访问)时才可用。例如,在开发过程中,您可以使用存储在属性列表中的测试记录填充CloudKit数据库。

本章介绍一些CloudKit API,并包含代码片段。#import 在每个使用CloudKit类和方法的实施文件的顶部添加。阅读Cloud Kit Framework Reference,以获取有关CloudKit API的详细信息。

关于设计架构

设计CloudKit模式,以存储要保留的应用程序对象模型的各个部分。如果要从头开始实现应用程序,请使用Model-View-Controller设计模式将用户界面视图与模型对象分开。然后设计一个架构,以有效地存储要存储在iCloud中的对象模型的各个部分。

将数据分为记录类型

CloudKit架构由一个或多个具有名称,字段和其他元数据的记录类型组成。字段类型与允许的属性列表类型相似,但有一些补充。Asset对于与记录分开存储的大容量数据,请使用特殊的类型;Location对于有效查询地理坐标的类型,请使用一种特殊的类型;对于记录之间Reference的一对一和一对多的关系,请使用一种特殊的类型。一条记录的最大大小为1MB,因此对于大数据,请使用该Asset类型(而不是该Bytes类型)。

该表显示了可能出现的字段类型(与它们在CloudKit仪表板中一样)以及它们等效的CloudKit框架类。

CloudKit快速入门之02 通过保存记录创建数据库架构 (SwiftUI iCloud CloudKit中文文档手册教程)_第1张图片
截屏2020-08-11 下午4.00.58.png

使用这些字段设计记录类型以存储应用程序的持久数据。例如,此主从细节用户界面的草图在主界面(左侧的列)中显示了艺术品标题的集合,在详细信息界面(右侧的区域)中显示了所选艺术品的属性。

CloudKit快速入门之02 通过保存记录创建数据库架构 (SwiftUI iCloud CloudKit中文文档手册教程)_第2张图片
截屏2020-08-11 下午4.01.06.png

在代码中,基础对象模型由Artwork和Artist类组成,其中和Artwork具有一对一的关系Artist。

在模式中,此对象模型中的对象与记录类型Artwork和之间存在一对一的映射Artist。记录类型的artist字段是具有对Artwork记录的引用的引用类型Artist。该image字段是Asset包含URL 的类型,并且该location字段是Location具有经度和纬度属性的类型。在所有其他领域Artwork,并Artist是简单的String和Date类型。

CloudKit快速入门之02 通过保存记录创建数据库架构 (SwiftUI iCloud CloudKit中文文档手册教程)_第3张图片
截屏2020-08-11 下午4.01.14.png

确定记录名称

确定为您的记录创建唯一名称的启发式方法。的记录名称加上一个记录区(一个数据库的一个分区)是记录标识符,它表示一个记录在数据库中的位置。记录名称可以是另一个数据源使用的外键,也可以是使其在记录区域内唯一的字符串组合。例如,记录的记录名称Artwork可以将艺术家的名字和姓氏与目录号结合在一起,如string所示115 Chen, Mei。如果您使用CloudKit仪表板创建记录,则会为该记录自动分配一个唯一ID。

以编程方式创建记录

首先创建一个记录标识符,[CKRecordID](https://developer.apple.com/documentation/cloudkit/ckrecordid)该类的实例,指定记录名称和记录区域。然后创建一条记录,[CKRecord](https://developer.apple.com/documentation/cloudkit/ckrecord)该类的实例,并传递记录标识符。使用键值编码样式方法设置记录的字段。

用代码创建记录

  1. 创建一个指定唯一记录名称的记录ID
let artworkRecordID = CKRecordID(recordName: "115")
CKRecordID *artworkRecordID = [[CKRecordID alloc] initWithRecordName:@"115"];
  1. 创建一个记录对象。
let artworkRecord = CKRecord(recordType: "Artwork", recordID: artworkRecordID)
CKRecord *artworkRecord = [[CKRecord alloc] initWithRecordType:@"Artwork" recordID:artworkRecordID];
  1. 设置记录内容
artworkRecord["title"] = "MacKerricher State Park" as NSString
artworkRecord["artist"] = "Mei Chen" as NSString
artworkRecord["address"] = "Fort Bragg, CA" as NSString
artworkRecord[@"title" ] = @"MacKerricher State Park";
artworkRecord[@"artist"] = @"Mei Chen";
artworkRecord[@"address"] = @"Fort Bragg, CA";

保存记录

首先选择一个数据库,您将在其中保存记录(公共,私有或自定义),然后保存记录。如果该记录不存在记录类型,则会为您创建。

保存记录

在应用程序的默认容器中获取数据库。
要获取公共数据库:

获得公共数据库

let myContainer = CKContainer.default()
let publicDatabase = myContainer.publicCloudDatabase
CKContainer *myContainer = [CKContainer defaultContainer];
CKDatabase *publicDatabase = [myContainer publicCloudDatabase];

获得个人数据库

let myContainer = CKContainer.default()
let privateDatabase = myContainer.privateDatabase
CKContainer *myContainer = [CKContainer defaultContainer];
CKDatabase *privateDatabase = [myContainer privateCloudDatabase];

获得自定义容器

let myContainer = CKContainer(identifier: "iCloud.com.example.ajohnson.GalleryShared")
CKContainer *myContainer = [CKContainer containerWithIdentifier:@"iCloud.com.example.ajohnson.GalleryShared"];

要创建由多个应用共享的自定义容器,请阅读在应用之间共享容器。

  1. 保存记录。
publicDatabase.save(artworkRecord) {
    (record, error) in
    if let error = error {
        // Insert error handling
        return
    }
    // Insert successfully saved record code
}
[publicDatabase saveRecord:artworkRecord completionHandler:^(CKRecord *artworkRecord, NSError *error){
   if (error) {
      // Insert error handling
      return
   }
   // Insert successfully saved record code
}];

在运行应用程序之前输入iCloud凭据

在开发中,当您在模拟器或设备上通过Xcode运行应用程序时,需要输入iCloud凭据才能读取公共数据库中的记录。在生产中,默认权限允许未经身份验证的用户读取公共数据库中的记录,但不允许他们写入记录。

因此,在运行应用程序并将记录保存到数据库之前,请在iOS的“设置”或Mac的“系统偏好设置”中输入iCloud帐户。同时启用iCloud Drive。稍后,编写必要的错误处理,以在需要iCloud凭据时向用户显示对话框,如提醒用户输入iCloud凭据中所述。

要在iOS模拟器中运行您的应用程序,请在选择模拟器之前在iOS模拟器中输入iCloud凭据,然后单击Xco​​de中的“运行”按钮。您需要对在Xcode的“方案”弹出菜单中选择的每个iOS模拟器执行这些步骤。

在iOS模拟器中输入iCloud凭据

  1. 选择“ Xcode”>“打开开发者工具”>“ iOS模拟器”。
  2. 在iOS模拟器中,选择“硬件”>“主页”。
  3. 启动设置应用程序,然后单击iCloud。
CloudKit快速入门之02 通过保存记录创建数据库架构 (SwiftUI iCloud CloudKit中文文档手册教程)_第4张图片
截屏2020-08-11 下午4.46.30.png
  1. 输入一个Apple ID和密码。

  2. 单击登录。

    等待iOS验证iCloud帐户。

  3. 要启用iCloud Drive,请单击iCloud Drive开关。

    如果未出现该开关,则说明已启用iCloud Drive。

有关如何创建iCloud帐户的信息,请阅读创建用于开发的iCloud帐户。

提醒用户输入iCloud凭据
通过在保存记录之前验证用户已登录其iCloud帐户来改善用户的体验。如果用户未登录,则显示警报,指示用户如何输入其iCloud凭据并启用iCloud Drive。在else下面的子句中插入保存记录的代码。

[[CKContainer defaultContainer] accountStatusWithCompletionHandler:^(CKAccountStatus accountStatus, NSError *error) {
    if (accountStatus == CKAccountStatusNoAccount) {
        UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"Sign in to iCloud"
                                                                       message:@"Sign in to your iCloud account to write records. On the Home screen, launch Settings, tap iCloud, and enter your Apple ID. Turn iCloud Drive on. If you don't have an iCloud account, tap Create a new Apple ID."
                                                                preferredStyle:UIAlertControllerStyleAlert];
        [alert addAction:[UIAlertAction actionWithTitle:@"Okay"
                                                  style:UIAlertActionStyleCancel
                                                handler:nil]];
        [self presentViewController:alert animated:YES completion:nil];
    }
    else {
        // Insert your just-in-time schema code here
    }
}];

要了解保存记录时可能发生的错误,请阅读CloudKit Framework Constants Reference

运行您的应用

在Xcode中,运行您的应用程序以执行保存记录并在数据库中创建架构的代码。

验证您的步骤

使用CloudKit仪表板来验证记录类型是否已添加到架构以及记录是否已添加到数据库。

使用CloudKit仪表板查看记录类型

验证记录类型具有正确的字段名称和类型。

查看记录类型

  1. 登录到CloudKit仪表板。

  2. 从列表中选择您的应用程序使用的容器。

  3. 在开发或生产环境中选择数据。

  4. 在标签栏中,单击“记录类型”。

  5. 选择一种记录类型。

    字段名称和类型显示在右侧的详细信息区域中。

CloudKit快速入门之02 通过保存记录创建数据库架构 (SwiftUI iCloud CloudKit中文文档手册教程)_第5张图片
截屏2020-08-11 下午4.49.13.png
  1. Users出现的记录类型是保留的系统记录类型,无法删除,但是可以向其添加字段。

在查看记录之前启用RecordName索引

默认情况下,禁用使用即时模式创建的记录类型的所有元数据索引。需要启用recordName查询索引以查看CloudKit仪表板中的关联记录。

启用recordName查询索引

  1. 在标签栏中,单击“索引”,然后选择一种记录类型。

  2. 单击添加索引,然后选择recordName字段。

  3. 单击保存记录类型。

使用CloudKit仪表板查看记录

验证保存的记录是否包含所有数据。

查看记录

  1. 在CloudKit仪表板的标签栏中,单击“记录”。

  2. 通过添加过滤器或排序条件来定义查询。

  3. 单击查询记录。

  4. 在第二列中,选择一个recordName。

    记录键值对显示在右侧的详细信息区域中

CloudKit快速入门之02 通过保存记录创建数据库架构 (SwiftUI iCloud CloudKit中文文档手册教程)_第6张图片
截屏2020-08-11 下午4.49.48.png

技术交流

QQ:3365059189
SwiftUI技术交流QQ群:518696470

你可能感兴趣的:(CloudKit快速入门之02 通过保存记录创建数据库架构 (SwiftUI iCloud CloudKit中文文档手册教程))