我尝试使用CloudKit查找用户记录ID。我们已验证帐户状态为CKAccountStatusAvailable
。然后我试试这个:
[[CKContainer defaultContainer] fetchUserRecordIDWithCompletionHandler:^(CKRecordID *recordID, NSError *error) {
if (error == nil) {
NSLog(@"Got user record ID (no permission req): %@", recordID);
} else {
NSLog(@"Couldn't get user record ID, error=%@", error);
}
}];
这不可避免地失败,结果如下:
(lldb) po error
<CKError 0x608000043990: "Not Authenticated" (9/1004); "Account couldn't get container scoped user id, no underlying error received">
(lldb) po [error userInfo]
{
NSDebugDescription = "CKInternalErrorDomain: 1004";
NSLocalizedDescription = "Account couldn't get container scoped user id, no underlying error received";
NSUnderlyingError = "<CKError 0x608000044080: \"Unknown Error\" (1004)>";
}
&#34;未经过身份验证&#34;有点似乎不正确 - 我已登录到iCloud帐户,其他iCloud应用程序(例如TextEdit,Reminders)正常工作(无论如何,如果我不是,我不应该得到{ {1}})。还有什么可以/我应该在这里做什么?
这是在OSX,Yosemite beta 3.更新:在beta 4中保持不变。
答案 0 :(得分:5)
问题是默认与自定义CloudKit容器的混淆。我已经将我的应用程序配置为使用自定义容器,但尝试在我的代码中使用默认容器(在设置功能时我可能有点困惑)。无论如何,关键是从应用程序的功能中获取容器名称,然后使用[CKContainer containerWithIdentifier:]
在运行时查找它,而不是使用[CKContainer defaultContainer]
。
遗憾的是,错误消息没有帮助,我很惊讶[CKContainer defaultContainer]
没有返回nil,但无论如何代码现在都可以使用。
答案 1 :(得分:1)
有同样的问题,意识到我在iCloud的模拟器上使用我的开发者帐户登录,切换到我的另一个然后工作。