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的主要内容,如果未能解决你的问题,请参考以下文章