- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
在大量搜索示例代码后设法拼凑出一个 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/
我需要获取cloudkit中的最后一条记录。这是我的代码: CKContainer *container = [CKContainer containerWithIdentifier:contain
我有一个 CKQueryOperation 处理一千条记录,因此我需要多次执行该操作。我尝试更改光标并添加如下代码中的操作: let queryOperation = CKQueryOperation
我在使用大批量数据创建 CKQuery 操作时遇到问题。我的查询适用于 100 个结果,但在更多结果查询失败后,因为一个线程调度错误或其他原因(libdispatch.dylib`dispatch_g
我在iOS 9应用程序中使用CloudKit,并且有一个CKQueryOperation可以正常工作,并且插入Mac后按预期执行。当查询未插入Mac时运行后,它不会完成。没有错误消息,我添加的 Act
我尝试在 CloudKit 数据库上使用 CKQueryOperation,而不是 performQuery。 两者都有效,但是当使用 CKQueryOperation 时,设备离线时我不会收到错误消
如果 CKQueryOperation 返回一个 RequestRateLimited 错误,是应该将相同的 queryOperation 添加到 publicDatabase,还是应该根据收到的游标
在大量搜索示例代码后设法拼凑出一个 CKFetchRecordsOperation;在这里……但我一定错过了什么。不要误会我的意思,这是一种享受……但是…… 要执行 CKFetchRecordsOpe
我的应用程序需要使用 CKDatabase 运行 CKQueryOperation。这需要并不总是可用的网络访问。 一旦我向 CKDatabase 添加了一个 CKQueryOperation,这就是
我才刚刚开始使用 CloudKit,请多多包涵。 背景信息 在 WWDC 2015 上,苹果发表了关于 CloudKit 的演讲 https://developer.apple.com/videos/
我正在尝试在我的 CloudKit 数据库上使用 CKQueryOperation,而不是 performQuery。 两者都有效,但是当使用 CKQueryOperation 时,当设备处于离线状态
是否可以在 cloudkit 中实现“批量获取”,以便我可以调用一个方法来提取下一个 X 记录?目前,根据CloudKit Batch Fetches? cloudkit 隐式处理这个问题,但我想以某
情况是这样的——我正在使用一个简单的 UITableView 来呈现来自 CloudKit publicDB 的记录。当我运行该应用程序时,查询操作返回例如返回 2 个结果(目前只有这些结果)。 我的
resultLimit 的最大值是多少?我来自 parse.com,所以我习惯于使用批量下载,当这算作一个请求调用时,可以轻松地一次提取 1000 行数据。CKQueryOperation 有哪些限制
我需要查询记录类型为“事件”的 CKRecords。当我调用 recordFetchedBlock 时,我会将这些记录添加到我的数组中。但是,recordFetchedBlock 永远不会被调用。请帮
我是使用 CloudKit 和数据库获取的新手,我已经查看了 CKDataBaseOperation 调用,所以我试图了解向数据库添加操作和在该数据库上使用“正常”函数调用之间的真正区别,如果他们两者
我将如何声明一个从 CloudKit 中检索记录的闭包,该闭包会迭代调用自身直到获取所有记录?下面的代码就是这样做的,除了我收到一条错误消息 Variable used within its own
我正在尝试使用 CloudKit 和光标从我的 iCloud 公共(public)数据库下载一批记录。无论 resultsLimit 是如何设置的,代码在前 3 次执行中工作正常,但永远不会执行第 4
CloudKit 有大约 2000 条记录我正在尝试下载。我无法全部下载,我查看了 CloudKit CKQueryOperation doesn't get all records获得超过 100
我实现了 CloudKit 抓取功能。但是我这里有一些问题。当我使用下面的代码时 let cloudContainer = CKContainer.defaultContainer()
我是一名优秀的程序员,十分优秀!