Cloudkit:“错误保存记录写入操作不允许”

Posted

技术标签:

【中文标题】Cloudkit:“错误保存记录写入操作不允许”【英文标题】:Cloudkit: " error saving record WRITE operation not permitted" 【发布时间】:2015-08-24 22:50:11 【问题描述】:

我正在尝试保存记录 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。

你们中的任何人都知道为什么会发生这种情况,直到最后一条记录之前它一直运行良好,或者你们中的任何人都知道解决这个问题的方法?

非常感谢您的帮助。

【问题讨论】:

您是保存新记录还是更新现有记录?如果您正在更新,那么该记录是否也是由您创建的(相同的苹果 ID)。如果没有,则转到 iCloud 仪表板并将权限设置为所有用户都可以更新的记录类型。 感谢您指出您需要设置权限以允许删除公共记录。 【参考方案1】:

您需要设置权限以允许用户写入(或删除)由其他人创建的记录。您在开发环境中执行此操作,在 Schema、Record Types 下,选择特定记录,然后在右侧有一个标记为 Security 的下拉菜单。授予“已验证”角色读取和写入的权限。然后部署到生产环境。

【讨论】:

这应该被标记为正确答案(尽管如果您仍在开发中,则不需要“部署到生产”)。 现在可以在顶部的“安全角色”选项卡中找到它:)【参考方案2】:

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

请注意,这不是即时的,这些更改在保存后需要一段时间才能传播。稍后再回来刷新页面以查看它们是否已应用。

如果您在设置这些权限并让它们传播后仍然收到此错误,则可能是您在模拟器中的 iCloud 登录出现问题。 退出 iCloud 并再次登录为我解决了这个问题。

【讨论】:

在“将架构部署到生产”并等待一段时间后,我仍然在生产环境中设置角色时遇到问题 - 所有复选框都是空的,并且看起来字段被禁用。我做错了什么?【参考方案3】:

我花了 2 天时间处理“权限失败 (10/2007)”。所有权限和安全角色都设置为 William.T 图片。重新登录 iCloud 没有任何结果。 障碍出现在一个小环境中(Apple 没有记录) - 它是位于的切换器“iCloud Drive” 设置/[您的帐户]/iCloud/iCloud Drive 在我的设备上。苹果的文档很糟糕!没有人会返回我花了 2 天。 希望这可以帮助遇到同样问题的人。

【讨论】:

【参考方案4】:

在我的例子中,我忘了做一个基本的检查:确保您已使用您的 Apple ID 登录,并确保您的应用程序的 iCloud 复选标记已打开。 尤其是使用模拟器时会发生这种情况。

【讨论】:

以上是关于Cloudkit:“错误保存记录写入操作不允许”的主要内容,如果未能解决你的问题,请参考以下文章

如何将 CloudKit 记录数据从“TableView-Controller B”传递到“View-Controller C”?

CloudKit 谓词

记录未保存 Cloudkit

CloudKit 查询的奇怪错误

如何对 CloudKit 记录值求和

CloudKit:获取列表属性中具有特定元素的记录