CKQueryOperation获取最后一条记录
问题描述:
我需要获取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中的最后一条记录?
我会很感激你的帮助
答
您可以排序的创作DAT上升,然后就索要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];
resultsLimit似乎对我没有任何影响 – 2016-11-22 00:53:07