【问题标题】:Getting Private User Record in CloudKit在 CloudKit 中获取私有用户记录
【发布时间】:2015-09-29 00:21:26
【问题描述】:

我正在尝试在 CloudKit 中获取用户保存的数据。我可以在 CloudKit 仪表板中看到记录,但无法通过应用程序中的代码访问它。

-(void)getUserRecordID {
    CKContainer *defaultContainer =[CKContainer defaultContainer];
    [defaultContainer fetchUserRecordIDWithCompletionHandler:^(CKRecordID *recordID, NSError *error) {
        if (!error) {

            [defaultContainer fetchUserRecordIDWithCompletionHandler:^(CKRecordID *recordID, NSError *error) {
                 self.userRecordID = recordID;
                NSLog(@"user record id: %@",recordID);
                [self getUserRecord];

            }];

       }
        else {
            NSLog(@"error: %@",error.localizedDescription);
        }
    }];

}

-(void)getUserRecord {
    CKContainer *defaultContainer =[CKContainer defaultContainer];   
    CKDatabase *publicDatabase = defaultContainer.publicCloudDatabase;
    [publicDatabase fetchRecordWithID:self.userRecordID completionHandler:^(CKRecord *userRecord, NSError *error) {
        if (!error) {
            NSLog(@"current coins: %@",userRecord);


        }
        else {
            NSLog(@"error: %@",error.localizedDescription);
        }
    }];
}

这会获取用户记录信息,但不会获取已保存私人记录的 ID。我怎样才能得到它们?

【问题讨论】:

  • 与您希望它做的相比,澄清您发布的代码的作用和不作用。
  • 它确实获取了当前用户的用户记录。它不会获取保存在该用户私有容器中的数据,也不会获取私有记录的 RecordID。
  • 您的代码不会尝试读取其他记录,只读取用户记录。
  • 我希望我能获得私人记录或其他东西的 ID。但我在文档中找不到任何说明如何去做的事情......
  • 您应该阅读CloudKit Quick Start 指南。

标签: ios cloudkit


【解决方案1】:

想出了解决办法。您必须使用 CKQuery 和 NSPredicate 查询私有记录。

-(void)getUserRecordID {
    CKContainer *defaultContainer =[CKContainer defaultContainer];
    [defaultContainer fetchUserRecordIDWithCompletionHandler:^(CKRecordID *recordID, NSError *error) {
        if (!error) {
            self.userRecordID = recordID;
            NSLog(@"user record id: %@",recordID.recordName);
            [self getStatsRecord];
        }
        else {
            NSLog(@"error: %@",error.localizedDescription);
        }
    }];

}

-(void)getStatsRecord {
    CKDatabase *privateDatabase = [[CKContainer defaultContainer] privateCloudDatabase];
    CKReference *reference = [[CKReference alloc] initWithRecordID:self.userRecordID action:CKReferenceActionNone];
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"creatorUserRecordID = %@", reference];
    CKQuery *query = [[CKQuery alloc] initWithRecordType:@"Stats" predicate:predicate];
    [privateDatabase performQuery:query inZoneWithID:nil completionHandler:^(NSArray *results, NSError *error) {
        if (error) {
            NSLog(@"error: %@",error.localizedDescription);
        }
        else {
            if (![results firstObject]) {
                [self createBlankRecord];
            }
            else {
                CKRecord *record = [results firstObject];
                NSLog(@"%@",record);
            }
        }
    }];

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-08
    • 1970-01-01
    • 2017-07-11
    相关资源
    最近更新 更多