Cloudkit:"错误保存记录WRITE操作不允许"

use*_*482 10 cocoa cloudkit ckrecord

我正在尝试保存记录CloudKit但是我从cloudkit中收到以下错误:

error saving record este es error: Error saving record <CKRecordID: 0x7fef15b5d2a0; 2:(_defaultZone:__defaultOwner__)> to server: WRITE operation not permitted
Run Code Online (Sandbox Code Playgroud)

以下是我试图保存记录的方法:

[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);
}
}];
Run Code Online (Sandbox Code Playgroud)

但之前我检查过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);

         }
     } ];
Run Code Online (Sandbox Code Playgroud)

我在哪里获得状态1,意思是CKAccountStatusAvailable.

你们中的任何人都知道为什么会发生这种情况它一直运作良好,直到最后一条记录或者你们中的任何一个人知道这方面的工作?

我真的很感谢你的帮助.

Pet*_*mer 25

您需要设置权限以允许用户写入(或删除)由其他人创建的记录.您可以在开发环境中,在Schema,Record Types下选择特定记录,然后在右侧有一个标记为Security的下拉菜单.授予角色'Authenticated'读写权限.然后部署到Production.

  • 现在可以在顶部的安全角色选项卡中找到:) (2认同)

Wil*_* T. 7

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

请注意,这不是即时的,这些更改在保存后需要一段时间才能传播。稍后返回并刷新页面以查看它们是否已应用。 在此处输入图片说明

在此处输入图片说明

如果您在设置这些权限并让它们传播后仍然收到此错误,那么您在模拟器中的 iCloud 登录可能会搞砸。注销 iCloud 并再次登录为我解决了这个问题。