gpt4 book ai didi

ios - CKFetchRecordsOperation + CKQueryOperations ...我错过了什么?

转载 作者:可可西里 更新时间:2023-11-01 06:22:54 24 4
gpt4 key购买 nike

在大量搜索示例代码后设法拼凑出一个 CKFetchRecordsOperation;在这里……但我一定错过了什么。不要误会我的意思,这是一种享受……但是……

要执行 CKFetchRecordsOperation,您需要一个 CKRecordIDs 的 NSArray;要获得 CKRecordID 的 NSArray,您需要执行 CKQuery,通过它您可以构建 NSArray 的 CKRecordID。

但是等一下,提取 CKRecordID 的过程使用了 CKQuery,我可以通过它简单地下载 CKRecords 吗?

如果不使用 CKQuery,您如何获得 NSArray 的 CKRecordID?

-(void)doSingleBeaconsDownload
{
CKDatabase *publicDatabase = [[CKContainer containerWithIdentifier:@"iCloud.cqd.ch.BeaconBrowser"] publicCloudDatabase];
NSPredicate *predicatex = [NSPredicate predicateWithFormat:@"iBeaconConfig = %@",iBeaconsConfirmed.giReferenceID];
CKQuery *query = [[CKQuery alloc] initWithRecordType:@"Running" predicate:predicatex];

[self.delegate performSelectorOnMainThread:@selector(processCompleted:) withObject:@"Downloading Configuration ..." waitUntilDone:YES];

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

if (error) {
NSLog(@"Batch Download Error iCloud error %@",error);
}
else {
NSMutableArray *rex2download = [[NSMutableArray alloc] init];
for (CKRecord *rex in results) {
[rex2download addObject:rex.recordID];
}

CKFetchRecordsOperation *fetchRecordsOperation = [[CKFetchRecordsOperation alloc] initWithRecordIDs:rex2download];

/* fetchRecordsOperation.perRecordCompletionBlock = ^(CKRecord *record, CKRecordID *recordID, NSError *error) {
if (error) {
// Retain the record IDs for failed fetches
}
else {
// Do something with each record downloaded
}
};*/

fetchRecordsOperation.perRecordProgressBlock = ^(CKRecordID *record, double recordsDownloaded) {
if (error) {
// damn ...
} else {
NSLog(@"Downloaded %f", recordsDownloaded);
}
};
fetchRecordsOperation.fetchRecordsCompletionBlock = ^(NSDictionary *recordsByRecordID, NSError *error) {
if (error) {
// Failed to fetch all or some of the records
}
else {
for(CKRecord *record in results) {
NSLog(@"Fini download %lu",(unsigned long)[recordsByRecordID count]);
}
[self.delegate performSelectorOnMainThread:@selector(beaconsDownloaded:) withObject:noOf waitUntilDone:YES];
}
};
[publicDatabase addOperation:fetchRecordsOperation];
}
}];
}

最佳答案

来自苹果 Documentation : CKFetchRecordsOperation 对象从 iCloud 检索 CKRecord 对象(您已经知道其 ID)。

CKQueryOperation 用于根据一些查询从 iCloud 检索 CKRecords,因此即使您不知道它们的记录 ID 也可以获取它们。仅当您拥有 CKRecordID 时才使用 CKFetchRecordsOperation。您可以在不访问 iCloud 的情况下创建 CKRecordID,并且可以将它们存储在您拥有的任何本地存储中。

我用于此类操作的一个很好的用例是,当您想要修改 CKRecord 时,您需要首先从 iCloud 检索它(使用 CKFetchRecordsOperation),然后使用 CKModifyRecordsOperation 将其保存回来。

看看 CloudKit 上的两个 WWDC 2014 视频,它们很好地解释了这一点。

关于ios - CKFetchRecordsOperation + CKQueryOperations ...我错过了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30444050/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com