zl程序教程

您现在的位置是:首页 >  其他

当前栏目

CloudKit快速入门之04 取得记录 (SwiftUI iCloud CloudKit中文文档手册教程)

中文文档教程入门 快速 记录 手册 SwiftUI
2023-09-11 14:18:48 时间

取得记录

将记录保存到数据库后,可以使用不同的机制来检索它们。通过记录ID提取单个记录,或使用谓词查询许多记录。(谓词定义了用于搜索记录的逻辑条件。)通常,您获取记录的子集以在启动时向用户显示,然后订阅用户感兴趣的更改。

如果使用Location字段类型,则还可以按照地理位置获取记录中的描述获取地理区域内的记录

通过标识符获取记录

如果您知道要获取的记录的记录ID,则可以按单个记录ID进行获取。例如,此代码片段获取名为的记录115

CKDatabase *publicDatabase = [[CKContainer defaultContainer] publicCloudDatabase];
CKRecordID *artworkRecordID = [[CKRecordID alloc] initWithRecordName:@"115"];
[publicDatabase fetchRecordWithID:artworkRecordID completionHandler:^(CKRecord *artworkRecord, NSError *error) {
   if (error) {
      // Error handling for failed fetch from public database
   }
   else {
      // Display the fetched record
   }
}];

提取和修改记录
您可以获取,修改和保存对单个记录所做的更改。此代码片段获取一条Artwork记录,更改其date字段值,并将其保存到数据库。

// Fetch the record from the database
CKDatabase *publicDatabase = [[CKContainer defaultContainer] publicCloudDatabase];
CKRecordID *artworkRecordID = [[CKRecordID alloc] initWithRecordName:@"115"];
[publicDatabase fetchRecordWithID:artworkRecordID completionHandler:^(CKRecord *artworkRecord, NSError *error) {
   if (error) {
      // Error handling for failed fetch from public database
   }
   else {
      // Modify the record and save it to the database
      NSDate *date = artworkRecord[@"date"];
      artworkRecord[@"date"] = [date dateByAddingTimeInterval:30.0 * 60.0];
      [publicDatabase saveRecord:artworkRecord completionHandler:^(CKRecord *savedRecord, NSError *saveError) {
         // Error handling for failed save to public database
      }];
   }
}];

使用谓词查询记录

如果您有很多记录并将大文件存储在iCloud中,则不太可能要将所有记录本地存储在设备上。相反,您可以使用查询来获取数据的一部分。查询将记录类型,谓词和排序描述符组合在一起,其中谓词包含已建立索引的字段。您使用[CKQuery](https://developer.apple.com/documentation/cloudkit/ckquery)对象在代码中构建查询。

例如,此代码片段将提取具有指定标题的所有图稿。

CKDatabase *publicDatabase = [[CKContainer defaultContainer] publicCloudDatabase];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"title = %@", @"Santa Cruz Mountains"];
CKQuery *query = [[CKQuery alloc] initWithRecordType:@"Artwork" predicate:predicate];
[publicDatabase performQuery:query inZoneWithID:nil completionHandler:^(NSArray *results, NSError *error) {
    if (error) {
        // Error handling for failed fetch from public database
    }
    else {
        // Display the fetched records
    }
}];

在图库应用程序中,将提取具有指定标题的插图。

截屏2020-08-11 下午9.01.35.png

回顾

在本章中,您学习了如何:

  • 按标识符获取记录
  • 提取,修改和保存单个记录
  • 使用查询和谓词获取多个记录

技术交流

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