2014-12-01 126 views
3

我需要获取cloudkit中最后一条记录。这里是我的代码:CKQueryOperation获取最后一条记录

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中的最后一条记录?

我会很感激你的帮助

回答

4

您可以排序的创作DAT上升,然后就索要1分的结果是这样的(代码在SWIFT):

添加排序:

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

限制的结果:

queryOp.resultsLimit = 1 
+0

resultsLimit似乎对我没有任何影响 – 2016-11-22 00:53:07

1

Objective-C的版本

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

一条记录:

queryOp.resultsLimit = 1; 
0

设置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]; 
相关问题