creatorUserRecordID.recordName包含"__defaultOwner__"而不是仪表板中显示的UUID

Ján*_*nos 5 ios cloudkit ckrecord

下载一个CKRecordfrom CloudKit和when plotting创建者recordName,我可以看到:

(lldb) po record.creatorUserRecordID.recordName
__defaultOwner__
Run Code Online (Sandbox Code Playgroud)

但是,仪表板显示了真正的价值.

在此输入图像描述

为什么不同?!

我希望我没有下载只因为这个登录用户第一次?!

mal*_*hal 6

__defaultOwner__意思是它归当前登录的 iCloud 帐户所有。所以你可以检查它并显示“我”或这个人的名字(如果你有的话)。如果您需要找出登录用户,recordID您可以使用异步方法:fetchUserRecordIDWithCompletionHandler

  • 此外,可以在变量中找到:CKCurrentUserDefaultName:https://developer.apple.com/documentation/cloudkit/ckcurrentuserdefaultname?language=objc (2认同)

小智 -2

这是一个错误

编辑这个:

- (void)postMoodFeed:(NSString *)moodFeed
{
    CKRecord *moodRecord = [[CKRecord alloc] initWitenter code herehRecordType:@"Mood"];
    moodRecord[@"moodFeed"] = moodFeed`enter code here`

    [[[CKContainer defaultContainer] publicCloudDatabase] saveRecord:moodRecord completionHandler:^(CKRecord *record, NSError *error) {
        [self queryMyMood];
    }];
}

- (void)queryMyMood
{
    // currentUserRecordID is fetched from fetchUserRecordIDWithCompletionHandler: of CKContainer
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"creatorUserRecordID = %@", currentUserRecordID];

    CKQuery *query = [[CKQuery alloc] initWithRecordType:@"Mood" predicate:predicate];

    [[[CKContainer defaultContainer] publicCloudDatabase] performQuery:query inZoneWithID:nil completionHandler:^(NSArray *results, NSError *error) {
        if (results) {
            for (CKRecord *eachRecord in results) {
                // Following logs are all __defaultOwner__
                NSLog(@"%@", eachRecord.creatorUserRecordID.recordName);
                [[[CKContainer defaultContainer] publicCloudDatabase]fetchRecordWithID:eachRecord.creatorUserRecordID completionHandler:^(CKRecord *record, NSError *error) {
                    // All following logs are "Unknown item" error
                    NSLog(@"%@", error);
                }];
            }
        }
    }];
}
Run Code Online (Sandbox Code Playgroud)