Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone CKQueryOperation获取最后一条记录_Iphone_Xcode_Icloud_Cloudkit_Ckquery - Fatal编程技术网

Iphone CKQueryOperation获取最后一条记录

Iphone CKQueryOperation获取最后一条记录,iphone,xcode,icloud,cloudkit,ckquery,Iphone,Xcode,Icloud,Cloudkit,Ckquery,我需要拿到cloudkit中的最后一张唱片。这是我的密码: CKContainer *container = [CKContainer containerWithIdentifier:containerID]; CKDatabase *publicDatabase = [container publicCloudDatabase]; CKQuery *query = [[CKQuery alloc] initWithRecordType:recordType

我需要拿到cloudkit中的最后一张唱片。这是我的密码:

 CKContainer *container = [CKContainer containerWithIdentifier:containerID];
    CKDatabase *publicDatabase = [container publicCloudDatabase];
    CKQuery *query = [[CKQuery alloc] initWithRecordType:recordType
                                               predicate:[NSPredicate predicateWithFormat:@"TRUEPREDICATE"]];
     CKQueryOperation *queryOp = [[CKQueryOperation alloc] initWithQuery:query];

    queryOp.desiredKeys = @[@"record.recordID.recordName"];
    queryOp.recordFetchedBlock = ^(CKRecord *record)
    {
        //do something
    };

     queryOp.queryCompletionBlock = ^(CKQueryCursor *cursor, NSError *error)
    {
        NSLog(@"CKQueryCursor  error %@", error);
    };

    queryOp.resultsLimit = CKQueryOperationMaximumResults;
    [publicDatabase addOperation:queryOp];
我的问题是如何修改代码以获得cloudkit中的最后一条记录


我非常感谢您的帮助

您可以在创建数据上进行升序排序,然后只需请求1个这样的结果(代码是Swift):

添加排序:

query.sortDescriptors = [NSSortDescriptor(key: "creationDate", ascending: false)]
限制结果:

queryOp.resultsLimit = 1
Objective-C版本

    NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"creationDate" ascending:NO];
query.sortDescriptors = @[sortDescriptor];
有一项记录:

queryOp.resultsLimit = 1;

设置resultsLimit似乎对我不起作用,但是无论如何都要设置它,并使用时间戳或记录创建日期对结果进行排序。然后将结果存储在数组中,并根据排序顺序使用第一个或最后一个项目

    CKContainer *container = [CKContainer containerWithIdentifier:containerID];
    CKDatabase *publicDatabase = [container publicCloudDatabase];
    CKQuery *query = [[CKQuery alloc] initWithRecordType:recordType predicate:[NSPredicate predicateWithFormat:@"TRUEPREDICATE"]];

    NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"creationDate" ascending:NO];
    query.sortDescriptors = @[sortDescriptor];

    CKQueryOperation *queryOp = [[CKQueryOperation alloc] initWithQuery:query];
    queryOp.desiredKeys = @[@"record.recordID.recordName"];
    queryOp.recordFetchedBlock = ^(CKRecord *record)
    {
        //do something
        recordArray.append(record)
    };

    queryOp.queryCompletionBlock = ^(CKQueryCursor *cursor, NSError *error)
    {
        NSLog(@"CKQueryCursor  error %@", error);
        let myLastRecord = recordArray[recordArray.count - 1]
    };

    queryOp.resultsLimit = CKQueryOperationMaximumResults;
    [publicDatabase addOperation:queryOp];

结果限制似乎对我没有影响