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

Posted

技术标签:

【中文标题】creatorUserRecordID.recordName 包含“__defaultOwner__”而不是仪表板中显示的 UUID【英文标题】:creatorUserRecordID.recordName contains "__defaultOwner__" instead of UUID shown in Dashboard 【发布时间】:2015-05-28 09:18:34 【问题描述】:

CloudKit 下载CKRecord 并在绘制创建者recordName 时,我可以看到:

(lldb) po record.creatorUserRecordID.recordName
__defaultOwner__

但是,Dashboard 显示了一个真正的价值。

为什么不一样?!

我希望我不必仅仅因为这个登录用户先下载?!

【问题讨论】:

【参考方案1】:

__defaultOwner__ 表示它归当前登录的 iCloud 帐户所有。因此,您可以检查并显示“我”或此人的姓名(如果有)。如果需要查找登录用户的recordID,可以使用异步方法:fetchUserRecordIDWithCompletionHandler

【讨论】:

此外,这可以在变量中找到:CKCurrentUserDefaultName:developer.apple.com/documentation/cloudkit/… CKCurrentUserDefaultName 仅支持 ios 10.0+【参考方案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);
                ];
            
        
    ];

【讨论】:

这不是错误。检查malhal答案。

以上是关于creatorUserRecordID.recordName 包含“__defaultOwner__”而不是仪表板中显示的 UUID的主要内容,如果未能解决你的问题,请参考以下文章