如何在私有数据库 CloudKit 中获取 RecordType 的所有名称

Posted

技术标签:

【中文标题】如何在私有数据库 CloudKit 中获取 RecordType 的所有名称【英文标题】:How to get all name of RecordType in a private Database CloudKit 【发布时间】:2015-02-05 09:32:09 【问题描述】:

我想知道如何在 Cloud Kit 中的私有数据库中获取一个包含所有记录类型名称的数组,以读取我的所有数据?

我保存我的数据:

CKRecord* fav1 = [[CKRecord alloc] initWithRecordType:@"Favoris1"];

[fav1 setObject:@"Favoris 1 name"forKey:@"name"];
[fav1 setObject:@"2003 year"forKey:@"year"];

[self.privateDatabase saveRecord:fav1
               completionHandler:^(CKRecord *savedState, NSError *error) 
                   if (error) 
                       NSLog(@"ERROR SAVING: %@", error);

                   
                   else
                       NSLog(@"SAVE OK");
                   
               ];

我读取了我的数据:

CKQuery *query = [[CKQuery alloc] initWithRecordType:@"Favoris1" predicate:[NSPredicate predicateWithFormat:@"TRUEPREDICATE"]];
[self.privateDatabase performQuery:query
                      inZoneWithID:nil
                 completionHandler:^(NSArray *results, NSError *error)
 
     if (!error)
     
         NSLog(@"results query %@", results);
         NSLog(@"--> %@",[[results objectAtIndex:0] objectForKey:@"name"]);
         NSLog(@"--> %@",[[results objectAtIndex:0] objectForKey:@"year"]);
     

     else
     
         NSLog(@"FETCH ERROR: %@", error);
     
 ];

我想用其他属性保存另一条记录,例如:

CKRecord* fav2 = [[CKRecord alloc] initWithRecordType:@"Favoris2"];
[fav2 setObject:@"Favoris 2 name"forKey:@"name"];
[fav2 setObject:@"2005 year"forKey:@"year"];

如何在保存后拥有一个包含 Favoris1 和 Favoris2 的数组来读取我的所有记录?

【问题讨论】:

【参考方案1】:

在 CloudKit 中没有函数可以从数据库中返回所有可用的记录类型。您也不能同时查询多个记录类型。您必须执行 2 个查询。如果您需要类似的东西,您可以做的是将结果数组连接在一起。

由于对象是相同的,最好只使用 1 个记录类型并添加一个额外的字段来指定您的自定义类型(Favoris1 或 Favoris2)然后您可以只查询记录类型并在返回的字段中查看它是自定义类型。

【讨论】:

以上是关于如何在私有数据库 CloudKit 中获取 RecordType 的所有名称的主要内容,如果未能解决你的问题,请参考以下文章

CloudKit 私有数据库返回前 100 个 CKRecords

如何获取 CloudKit 的实际配额?

如何使用 CloudKit 将条目从公共数据库保存到私有数据库

CloudKit 获取用户 iTunes 备份

CloudKit,NSPredicate 在私有容器中返回计数或确定是不是存在任何记录?

Cloudkit 私有数据库未显示