我正在我的应用程序中进行CloudKit同步("微小数据,所有设备"模型,私有数据库中的自定义区域).
CKModifyRecordsOperation包含文档中描述clientChangeTokenData的NSData类型属性,如下所示:
从提取操作修改记录时,请使用此属性指定客户端生成的数据标记,以指示上次修改的记录的版本.比较您在下一次记录提取中提供给数据令牌的数据令牌,以确认服务器已成功接收设备的上次修改请求.
我不明白为什么我应该打扰,因为每个请求,我得到一个完成块,告诉我服务器是否已成功收到我的请求.为什么我需要手动比较此客户端令牌?
是否clientChangeTokenData需要正确处理我的用例?我跟踪本地数据更改并在每次数据更改时推送队列中的所有内容.通过区域订阅跟踪远程更改.
如果需要,我如何正确生成此令牌,因为我的所有记录更改CKModifyRecordsOperation(我的API使用目的是批处理操作).这里的一般工作流程是什么?
谢谢.
我正在使用CKModifyRecordsOperation保存一组记录,如果我有互联网连接,一切正常,并且正在调用完成块.但是当我没有连接时,没有调用完成块,我也没有得到任何关于我的操作失败的信息.
我在完成块中使用以下代码
modifyOperations.modifyRecordsCompletionBlock = ^(NSArray *savedRecords, NSArray *deletedRecordIDs, NSError *error)
{
if(error){
NSLog(@"Error: %@", error.localizedDescription);
}
item.creatorRecordId = record.recordID;
};
Run Code Online (Sandbox Code Playgroud)
然后我正在使用
[self.publicDB addOperation:modifyOperations];
Run Code Online (Sandbox Code Playgroud)
任何想法如果操作失败,如何在没有互联网连接的情况下如何获取信息?
我有下面的代码,但在使用Xcode 7和Swift 2.0构建时出现错误
错误是Cannot call value non-function type (([CKRecord]?, [CKRecordID]?, NSError?) -> Void)?
谢谢
let saveRecordsOperation = CKModifyRecordsOperation()
var ckRecordsArray = [CKRecord]()
// set values to ckRecordsArray
saveRecordsOperation.recordsToSave = ckRecordsArray
saveRecordsOperation.savePolicy = .IfServerRecordUnchanged
saveRecordsOperation.modifyRecordsCompletionBlock { savedRecords, deletedRecordIDs, error in
// deal with conflicts
// set completionHandler of wrapper operation if it's the case
if saveRecordsOperation.finished == true {
}
}
database.addOperation(saveRecordsOperation)
Run Code Online (Sandbox Code Playgroud)