首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CloudKit: creatorUserRecordID of CKRecord问题(或Bug?)

CloudKit: creatorUserRecordID of CKRecord问题(或Bug?)
EN

Stack Overflow用户
提问于 2015-04-13 04:16:46
回答 2查看 1.9K关注 0票数 3

在iOS 8.3之后,如果记录是由经常帐户创建的,则它的creatorUserRecordID将类似于

defaultOwner:(_defaultZone:defaultOwner):CKRecordID:一些地址

然后,如果使用recordID获取此CKDatabase,则它总是返回错误,如下所示

CKError地址:“未知项”(11/2003);服务器消息=“未找到记录”;uuid =某些UUID;容器ID =某些容器ID

我以前从未遇到过这个问题。

它是一个bug,还是应该以其他方式从recordID ( defaultOwner )中获取记录?

编辑(添加示例代码)

代码语言:javascript
复制
- (void)postMoodFeed:(NSString *)moodFeed
{
    CKRecord *moodRecord = [[CKRecord alloc] initWithRecordType:@"Mood"];
    moodRecord[@"moodFeed"] = moodFeed

    [[[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);
                }];
            }
        }
    }];
}

编辑2015年7月2日

那是个窃听器。

在向苹果报告后,他们在iOS 9 Beta 2中修复了这个问题。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-04-16 06:46:33

实际上,它看起来像是新功能。

您可以做的是首先测试eachRecord.creatorUserRecordID.recordName == ==,如果是这样的话,您可以从currentUserRecordID中获取ID的记录

但最好不要将creatorUserRecordID用于应用程序中的任何功能。您最好添加一个新的CKReference字段,并始终使用currentUserRecordID填充它。然后,即使您有一个迁移数据的进程,您仍然知道最初是谁创建了该记录。

票数 1
EN

Stack Overflow用户

发布于 2015-08-01 06:19:21

也许这会有所帮助:我已经发现,如果您在应用程序的工作流开始时使用CKFetchRecordsOperation fetchCurrentUserRecordOperation,就不会有defaultOwner CKRecordID突然出现。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29597755

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档