我尝试为此使用 CKQueryOperation:
CKQueryOperation *o = [[CKQueryOperation alloc] initWithQuery:query];
[o setDesiredKeys:@[]];
Run Code Online (Sandbox Code Playgroud)
但它仍然返回了很多我此时不需要的数据
<CKRecord: 0x79881a50; recordType=Comment, recordID=CBB7B269-47AH-406E-8934-682D31501778:(_defaultZone:__defaultOwner__), recordChangeTag=i1x8j1ey, values={
}>
{
creatorUserRecordID -> <CKRecordID: 0x7966e9d0; _e5b178bde573ba6fee336b9ed8:(_defaultZone:__defaultOwner__)>
lastModifiedUserRecordID -> <CKRecordID: 0x7966cdd0; _e5b178bd3e9e7a6e336b9f34ed8:(_defaultZone:__defaultOwner__)>
creationDate -> 2014-10-31 07:20:45 +0000
modificationDate -> 2014-10-31 07:20:45 +0000
modifiedByDevice -> iPhone Simulator
}
Run Code Online (Sandbox Code Playgroud)
我只需要一个记录计数。
如何删除我放入云端的一些数据?我创建了一个应用程序,当您在1个视图控制器中输入一个URL时,它会上传到云端,当您转到另一个视图控制器时,它会在Webview中显示您之前从云端输入的URL.例如,当您进入www.hello.com时,它会进入云端,当您在不同的视图控制器上访问webview时,它会加载www.hello.com.
我的问题:
当我输入第二个网址时,它仍会加载第一个网址.如何加载我上传的最新版本?有没有办法在上传第二个时删除第一个?
我也在客户端和 CKAsset 的 fileUrl 上缓存 CKRecord。fileUrl 可以不时更改吗?资产/数据本身没有变化。
Apple 文档此处表示,当您启用 CloudKit 和 iCloud 时,Xcode 会自动生成默认容器。SO 上的其他帖子也说了同样的事情。
但是,启用 iCloud 和 CloudKit 后,Xcode 无法生成默认容器。
在Capabilities选项卡的 部分中iCloud,步骤 存在错误Add the "iCloud containers" entitlement to your App ID。其他步骤显示复选标记。
事实上,单击Fix issue并不能解决问题。
Add the "iCloud" entitlements to your App ID开发人员门户显示已为此应用程序和配置文件启用 iCloud,这似乎也得到了检查第一步(即 )的事实的支持。
是否必须手动创建容器,或者如何让 Xcode 自动生成容器?
有没有人知道String该闭包中该字段的用途public var recordWithIDWasDeletedBlock: ((CKRecordID, String) -> Void)?.我不知道它的用途,目前文档不完整.有任何想法吗?
我目前正在考虑将 CloudKit 作为我正在编写的新应用程序的后端。
Apple 声称拥有7.82 亿 iCloud 用户和 10 亿活跃的 iOS 设备,利用 iCloud 登录的想法听起来很棒。
我的假设是,这意味着几乎任何人都可以下载我的应用程序并开始使用它,而无需经历烦人的注册过程。
因此,出于好奇,我检查了我目前在商店中使用的应用程序中的 iCloud 使用率,该应用程序拥有数千名用户。
这是我检查iCloud的方法:
- (void)checkForiCloud {
[[CKContainer defaultContainer] fetchUserRecordIDWithCompletionHandler:^(CKRecordID *recordID, NSError *error) {
if (error.code == CKErrorNotAuthenticated) {
user.hasiCloud = NO;
} else if (recordID && recordID.recordName) {
user.hasiCloud = YES;
}
}];
}
Run Code Online (Sandbox Code Playgroud)
结果是只有不到 60% 的人设置了 iCloud。如果我必须要求 40% 的用户创建或登录 iCloud 帐户才能使用我的应用程序,这有点违背了目的。
所以这是我的问题:
有没有人看过类似的统计数据,或者知道我在哪里可以找到有关在其设备上设置了 iCloud 帐户的 iOS 用户百分比的好数字?
我正在关注有关CloudKit的WWDC会议.在这里,有这个代码剪断:
let changesOperation = CKFetchDatabaseChangesOperation(previousServerChangeToken: privateDatabaseChangeToken)
//(...)
changesOperation.fetchDatabaseChangesCompletionBlock = {
(newToken: CKServerChangeToken?, more: Bool, error: NSError?) -> Void in
// error handling here
self.sharedDBChangeToken = newToken // cache new token
self.fetchZoneChanges(callback) // using CKFetchRecordZoneChangesOperation
}
Run Code Online (Sandbox Code Playgroud)
即使代码完全是从幻灯片中复制的,XCode也会出现这个错误:
无法分配类型'(CKServerChangeToken?,Bool,NSError?) - > Void'的类型'((CKServerChangeToken?,Bool,错误?) - > Void)?'
我正在使用XCode 8.0 Beta 4,目标是iOS 10,以防这应该是编译器错误.
在 CloudKit 中,我尝试通过批处理来保存大量记录。但是,我的应用程序因以下错误而崩溃:
推送本地数据时出错:<CKError 0x15a69e640: "Limit Exceeded" (27/1020); “您的请求包含 561 个项目,超过单个请求中的最大项目数 (400)">
这是我的代码:
CKModifyRecordsOperation *modifyRecordsOperation = [[CKModifyRecordsOperation alloc] initWithRecordsToSave:localChanges recordIDsToDelete: localDeletions];
modifyRecordsOperation.savePolicy = CKRecordSaveAllKeys;
?
modifyRecordsOperation.modifyRecordsCompletionBlock = ^(NSArray *savedRecords, NSArray *deletedRecordIDs, NSError *error) {
if (error) {
NSLog(@"[%@] Error pushing local data: %@", self.class, error);
}
};
[privateDatabase addOperation:modifyRecordsOperation];
Run Code Online (Sandbox Code Playgroud)
如果我要获取一条记录,似乎所有内容都可以通过设置resultsLimitin来获得CKQueryOperation。
https://forums.developer.apple.com/thread/11121
当我想在批处理中使用 保存大量记录时CKModifyRecordsOperation,有没有办法消除限制?
CKContainer.discoverAllIdentities(completionHandler:), discoveryUserIdentity(recordID: - 完成处理程序返回 CKUserIdentity 但 .lookupInfo 始终为零,即使联系人包含电子邮件、电话等。其他属性如 hasiCloudAccount、userRecordID、nameComponents 都很好。这个问题刚刚开始发生最近发布的 Swift 3.1 有谁知道这是否是有意的行为,因为我在发行说明中找不到任何对 CloudKit 更改的引用,但这看起来像是隐私问题。
经过进一步调查,该问题可能是由于最近的 iOS 10.3 更新所致。在装有 10.2.1 的 iPhone 5 上运行该应用程序时,不会出现该问题,并且lookupInfo 正确包含 emailAddress
提交的 Apple 错误:31377433
新:此外,如果我尝试通过 CKDiscoverAllUserIdentitiesOperation 访问信息,特别是 userIdentityDiscoveredBlock -> user.nameComponents,则结果是与 12 岁以下用户关联的 Apple ID 的“空字符串”(并且可能在“家庭共享”上)计划)。我没有找到任何有关此问题的信息,苹果开发人员支持也没有提供任何帮助。
Apple非常清楚,在每个视频中他们都说"处理错误的CloudKit应用程序与不处理错误的应用程序之间的差异是工作应用程序与不支持工作应用程序之间的区别".但是,我无法在任何地方找到每个错误意味着什么的正确列表,哪些操作会抛出什么或任何示例代码的CloudKit错误处理为各种CKOperations做得很好.更糟糕的是,很多例子根本没有处理错误,我也找不到Apple的任何文档.
有没有人有他们可以分享的完整和完整的例子?哪些操作列表可以抛出什么?
这篇文章显示了错误列表和每个错误的简短描述.我创建了这个新帖子,因为我特意在寻找Apple建议的完整和完整的错误处理示例.另一篇文章有一个不完整的例子,并提出具体问题.我已经在评论中突出显示了这篇文章,因为它包含了每种错误类型的简短描述.