【问题标题】:how do I post data to CKRecord Fields objc如何将数据发布到 CKRecord Fields objc
【发布时间】:2021-04-23 02:01:00
【问题描述】:

我正在尝试获取我的 CloudKit 记录,然后使用新数据对其进行更新。
我已经导入了 CloudKit 框架 我已将 CloudKit 和键/值添加到我的功能中。 我已将它们纳入我的权利中。 我使用 Schemas 创建新的自定义类型私人记录并添加了 5 个字段。 我想知道如何在我的 iphone 应用程序中更新这些字段字符串,然后在我的手表应用程序上获取该信息并将数据放入文本标签中。
我尝试了各种方法,但似乎没有任何效果。 我在objc工作。 谁能帮帮我。

这是我尝试开始工作但收效甚微的一些代码。 作为一名 68 岁的退休美术老师,我自学了这一点,我不是一个训练有素的程序员,需要我能得到的所有帮助。

我刚试过这个,它运行通过,但我看不到我把我输入的键的值放在哪里。我把这些值放在哪里来修改。

[[CKContainer defaultContainer].privateCloudDatabase fetchRecordWithID:recordID
                         completionHandler:^(CKRecord *record, NSError *error) {
            record = [[CKRecord alloc] initWithRecordType: @"MyPoolInfo"];
            [record setObject: self.myTemp forKey: @"temperature"];
            [record setObject: self.myDate forKey: @"date"];
            [record setObject: self.myLevel forKey: @"level"];
            [record setObject: self.myTrip forKey: @"trip"];
            [record setObject: self.myBattery forKey: @"battery"];
            NSArray *myFields = [NSArray arrayWithObjects:record,nil];
            //NSArray *recordsToSave = [NSArray arrayWithObjects:self.myTemp,self.myDate,self.myLevel,self.myTrip,self.myBattery, nil];
            CKModifyRecordsOperation *modifyRecords= [[CKModifyRecordsOperation alloc]
                             initWithRecordsToSave:myFields recordIDsToDelete:nil];
          //[modifyRecords setValue:@"one" forKey:@"temperature"];
                      modifyRecords.savePolicy=CKRecordSaveAllKeys;
                      modifyRecords.qualityOfService=NSQualityOfServiceUserInitiated;
                      modifyRecords.modifyRecordsCompletionBlock=
                           ^(NSArray * savedRecords, NSArray * deletedRecordIDs, NSError * operationError){
            //   the completion block code here
                               
                               NSLog(@"savedRecords:%@",savedRecords);
                        };
                      
            
            [[CKContainer defaultContainer].privateCloudDatabase addOperation:modifyRecords];
         }];

我也试过了

CKRecord *record = [[CKRecord alloc] initWithRecordType: @"Pools"];
            [record setObject: self.myTemp forKey: @"temperature"];
            [record setObject: self.myDate forKey: @"date"];
            [record setObject: self.myLevel forKey: @"level"];
            [record setObject: self.myTrip forKey: @"trip"];
            [record setObject: self.myBattery forKey: @"battery"];
            [[CKContainer defaultContainer].privateCloudDatabase saveRecord:record completionHandler:^(CKRecord *record, NSError *error)
              { if (!error) {
                NSLog(@"this is being accessed1");
            }
            else{
                NSLog(@"this is bad");
            }
              }];

我输入了一个错误,如果它说我正在做的事情有错误

【问题讨论】:

  • 您的记录 ID 可能无效。第二行的recordID来自哪里?
  • 在我的 CloudKit 仪表板上,我创建了一个具有自定义类型记录池的私有数据库,并将其命名为“MyPoolInfo”。这就是名字的由来。我尝试在第二批末尾添加一行代码来实际保存数据,但它没有显示在我的仪表板中的查询下。
  • 我已经更改了一些我的第一个代码,我实际上运行没有错误,但没有保存任何东西。我没有在代码中看到它设置应该为不同的字段键保存哪些值。
  • 这是我的日志所说的。我不确定如何查看实际问题。 2021-01-20 06:46:05.856774-0700 iphoneMQTT[18400:962147] this is bad 2021-01-20 06:46:05.939680-0700 iphoneMQTT[18400:962149] savedRecords:( )

标签: ios objective-c key-value cloudkit


【解决方案1】:

您需要使用 CKRecord 对象将数据传入和传出数据库。每一个都必须具有与您在仪表板中定义的记录相匹配的记录类型。这是我自己代码中的一个示例;

  CKRecord *record = [[CKRecord alloc] initWithRecordType: @"addressRecord" ]; 
  [record setObject: patientRecord.address1 forKey: @"street1"];
  [record setObject: patientRecord.address2 forKey: @"street2"];
  [record setObject: patientRecord.city forKey: @"city"];
  [record setObject: patientRecord.state forKey: @"state"];

可以插入或修改;

  [privateDB saveRecord:record completionHandler:^(CKRecord *record, NSError *error)
  { .....
  }];

你的

  initWithRecordsToSave:myFields recordIDsToDelete:nil];

需要将 myFields 设为 CKRecords 数组。

【讨论】:

  • 我已尝试根据您的建议更新我的代码,但我收到错误或保存的记录中没有任何内容。在我的容器权限下的仪表板中,我创建了一个私有自定义类型 "Pools" 和 recordName "MyPoolInfo" 。我没有添加任何字段。起初我有“温度”等字段。但我认为这是不正确的。感谢您的帮助,但我仍然做错了什么。
  • 发布您使用上面发布的插入代码获得的实际错误代码。
  • 这是实际的日志。不知道如何编写代码以查看发生了什么。 2021-01-20 06:46:05.856774-0700 iphoneMQTT[18400:962147] this is bad 2021-01-20 06:46:05.939680-0700 iphoneMQTT[18400:962149] savedRecords:( )
  • 你知道如何使用调试器吗? saveRecord 调用后“error”如果有失败的原因就会有。 “错误”的值是多少?
  • 得到错误Couldn't get container configuration from the server for container "iCloud.LLC.iphoneMQTT" 是使用默认容器而不是指定我设置的容器的问题。在我的权利中,我将 iCloud 容器标识符设置为 iCloud.XXXXXX.com.bennarts.iphoneMQTT,但将 iCloud 键值存储设置为 iCloud.LLC.com.iphoneMQTT。我更改为另一个但收到错误:“配置配置文件“iOS 团队配置配置文件:LLC.iphoneMQTT”与 com.apple.develper.ubiquity-kvstore-identifier 权利的权利文件的值不匹配。```? ??
猜你喜欢
  • 1970-01-01
  • 2011-12-06
  • 1970-01-01
  • 2012-01-22
  • 2021-11-13
  • 1970-01-01
  • 1970-01-01
  • 2020-11-19
  • 2020-12-07
相关资源
最近更新 更多