云套件:记录保存错误,写入操作不允许。

10
我试图保存一个CloudKit记录,但是我从cloudkit得到了以下错误:
error saving record este es error: Error saving record <CKRecordID: 0x7fef15b5d2a0; 2:(_defaultZone:__defaultOwner__)> to server: WRITE operation not permitted

这是我尝试保存记录的方法:

[publicDatabase saveRecord:recordContent completionHandler:^(CKRecord *record, NSError *error){

if (!error)
{
    NSLog(@"saved!!!");

}
else
{
    if ([[error.userInfo valueForKey:@"ErrorDescription"] isEqualToString:@"record to insert already exists"])
    {
        NSLog(@"record already exist %@",[error.userInfo valueForKey:@"ErrorDescription"]);

    }

    NSLog(@"error saving record : %@",error.localizedDescription);
}
}];

但在此之前,我需要检查CloudKit是否可用:

[myContainer accountStatusWithCompletionHandler:^(CKAccountStatus accountStatus, NSError *error)
     {
         NSLog(@" no error but status %ld",accountStatus);

         if (((accountStatus == 3) || (accountStatus == 2)) && (!error))
         {
             NSLog(@" no error but status %ld",accountStatus);


             //            typedef NS_ENUM(NSInteger, CKAccountStatus) {
             //                /* An error occurred when getting the account status, consult the corresponding NSError */
             //                CKAccountStatusCouldNotDetermine                   = 0,
             //                /* The iCloud account credentials are available for this application */
             //                CKAccountStatusAvailable                           = 1,
             //                /* Parental Controls / Device Management has denied access to iCloud account credentials */
             //                CKAccountStatusRestricted                          = 2,
             //                /* No iCloud account is logged in on this device */
             //                CKAccountStatusNoAccount                           = 3,
             //
             //        }
         }


         if (error)
         {
             NSLog(@" accountStatus error %@",error);

         }
     } ];

我在获取状态1,即CKAccountStatusAvailable。

你们有谁知道为什么会发生这种情况吗?它一直运行得很好,直到最后一个记录或任何人都知道解决方法吗?

非常感谢你们的帮助。


您是在保存新记录还是更新现有记录?如果您正在更新,则该记录是否也由您创建(相同的Apple ID)?如果不是,则转到iCloud仪表板并将权限设置为recordType,以便所有用户都可以进行更新。 - Edwin Vermeer
感谢指出需要设置权限以允许删除公共记录。 - Peter B. Kramer
4个回答

31
您需要设置权限以允许用户编写(或删除)由其他人创建的记录。您可以在开发环境下的模式-记录类型中完成这一操作,选择特定的记录,然后在右侧找到标有“安全性”的下拉菜单。授予“已验证”的角色读取和编写的权限。然后部署到生产环境中。

这应该被标记为正确答案(如果您仍在开发中,则不需要“部署到生产”)。 - PKCLsoft
4
现在可以在顶部的"安全角色"选项卡中找到这个功能 :) - Max Chuquimia

7

这个在最新的CloudKit中已经被移动了,我花了一段时间才找到它。

请注意,这不是即时生效的,保存更改后需要一段时间才能传播。 稍后回来并刷新页面以查看是否已应用更改。 enter image description here

enter image description here

如果您在设置这些权限并让它们传播后仍然遇到此错误,则很可能是模拟器中的iCloud登录出现问题。退出iCloud并重新登录对我有帮助。


“部署模式至生产环境”后,有时需要等待一段时间,但我在生产环境中设置角色仍然会出现问题——所有复选框都是空的,看起来字段也被禁用了。我做错了什么? - zslavman

2

我花了两天时间解决“权限失败 (10/2007)”的问题。所有权限和安全角色都按照 William.T 的图片设置了。重新登录 iCloud 没有任何结果。 问题出在一个小设置上(苹果没有记录) - 它是位于我的设备上的开关“iCloud Drive”,位于 设置 / [你的账户] / iCloud / iCloud Drive 苹果的文档太差了!没有人会让我回到过去的两天。 希望这能帮助有同样问题的人。


0
在我的情况下,我忘记做一个基本检查:确保您已经使用您的Apple ID登录,并确保您的应用程序的iCloud勾选框已打开。这种情况在使用模拟器时尤其容易发生。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接