1

我正在开发实现 cloudkit 的 iOS 应用程序,但我需要查询 ID 大于数字的所有记录。例如,我有 ID 为 23 的记录:

在此处输入图像描述

这是我的代码:

CKContainer *myContainer = [CKContainer containerWithIdentifier:containerID];

    CKDatabase *publicDatabase = [myContainer publicCloudDatabase];


CKRecordID *recordID = [[CKRecordID alloc] initWithRecordName:@"23"];
    CKReference* recordToMatch = [[CKReference alloc] initWithRecordID:recordID action:CKReferenceActionNone];
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"recordID >= %@", recordToMatch];
    CKQuery *query = [[CKQuery alloc] initWithRecordType:recordType predicate:predicate];

    [publicDatabase performQuery:query inZoneWithID:nil completionHandler:^(NSArray *results, NSError *error) {
        if (error) {

            NSLog(@"error: %@", error.localizedDescription);
        }
        else {

        }
    }];

但我收到以下错误:

错误:错误:操作无法完成。(CKErrorDomain 错误 1。)

你们中的任何人都知道如何设置我的 NSPredicate 以获取 ID 大于 23 的所有记录?

我会非常感谢你的帮助。

4

2 回答 2

1

对于这样的查询,您可以使用如下谓词:

在斯威夫特:

var predicate = NSPredicate(format: "recordID >= %@", CKRecordID(recordName: "23"))

在目标 C 中:

 NSPredicate *predicate = [NSPredicate predicateWithFormat:@"recordID >= %@", [CKRecordID initWithRecordName:@"23"]];

然后我假设您最初在指定此数字时创建了 CKRecords 对象。否则,记录ID 值将由 CloudKit 分配,并且将是一个 GUID。

于 2015-05-31T08:51:21.570 回答
0

您的 23 记录 ID 存储为 CKRecordID 类型而不是数字,因此您不能使用任何数字谓词,例如大于。您应该在记录中创建一个新的数字字段来存储您的整数 ID 并改为查询它。

于 2015-12-08T09:14:08.290 回答