Objective c 使用recordName获取单个记录,它应该从icloud返回特定字段

Objective c 使用recordName获取单个记录,它应该从icloud返回特定字段,objective-c,cloudkit,Objective C,Cloudkit,我想使用cloudkit从icloud获取单个记录 以下是我正在使用的代码: NSPredicate *predicate = [NSPredicate predicateWithFormat:@"recordName contains %@",recordId]; NSLog(@"predicate------%@",predicate); CKQuery *query = [[CKQuery alloc] init

我想使用cloudkit从icloud获取单个记录

以下是我正在使用的代码:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"recordName contains %@",recordId];                                       
NSLog(@"predicate------%@",predicate);
CKQuery *query = [[CKQuery alloc] initWithRecordType:@"AmuzItems" predicate:predicate];
CKQueryOperation *queryOperation = [[CKQueryOperation alloc] initWithQuery:query];
queryOperation.database = publicDatabase;
queryOperation.resultsLimit =1 ;
queryOperation.desiredKeys = @[@"name",@"city",@"state"];
queryOperation.recordFetchedBlock = ^(CKRecord * record) {
        NSLog(@"record------%@",record);
};
queryOperation.queryCompletionBlock = ^(CKQueryCursor * cursor, NSError * operationError) {
    if (operationError) {                                                                                              NSLog(@"error--------%@",operationError);                                                                                                                                            
 } else
    {
        NSLog(@"cursor------%@",cursor);
    }
};

只想检索
姓名、城市、州
字段。RecordType中有15个字段。代码不返回任何内容,甚至不返回错误

对于像我一样面临同样问题的人:

CKDatabase *publicDatabase = [[CKContainer defaultContainer] publicCloudDatabase];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"recordID == %@",[[CKRecordID alloc]initWithRecordName:recordId]];
CKQuery *query = [[CKQuery alloc] initWithRecordType:@"RecordTypeName" predicate:predicate];
CKQueryOperation *queryOperation = [[CKQueryOperation alloc] initWithQuery:query];
NSOperationQueue * operationQueue = [[NSOperationQueue alloc] init];
queryOperation.database = publicDatabase;
queryOperation.resultsLimit =1 ;
queryOperation.desiredKeys = @[@"name",@"city",@"state"];
queryOperation.recordFetchedBlock = ^(CKRecord * record) {
 NSLog(@"record------%@",record);
};
queryOperation.queryCompletionBlock = ^(CKQueryCursor * cursor, NSError * error) {
    if (error) {
          NSLog(@"error--------%@",error);            
    } else
    {
        if (cursor) {
            NSLog(@"cursor-------%@",cursor);
        }
        else
        {
                NSLog(@"end");
        }
    }
};
 [operationQueue addOperation:queryOperation];

能否尝试将queryOperation.qualityOfService设置为。UserInteractive@EdwinVermeer:谢谢回复。我试过了,但没用。之后我使用了NSOperationQueue。在nspredicate中做一些更改,它就会起作用。啊。。。我错过了那个。您忘记了[queryOperation start];作为最后一行。您不需要NSOperationQueue。相反,您忘记的是对queryOperation执行start。是的。[queryOperation start]也可以。但是“queryOperation start”和NSOperationQueue之间的区别是什么。因为两者在这里以相同的方式工作。队列是可以处理多个操作的容器。数据库中已存在可用的队列。相反,您也可以调用publicDatabase.addOperation(queryOperation),我不确定在数据库上执行.start或使用addOperation有什么好处。我看到大多数示例代码都使用addOperation。