ios - CloudKit:CKRecord 问题(或错误?)的 creatorUserRecordID

标签 ios cloudkit

iOS 8.3以后,如果记录是由当前账号创建的,其creatorUserRecordID会是这样

CKRecordID: [Some Address]; defaultOwner:(_defaultZone:defaultOwner)

然后如果使用 fetchRecordWithID:completionHandler: 从 CKDatabase 获取这个 recordID,它总是会返回类似这样的错误

CKError [Some Address]: "Unknown Item" (11/2003); server message = "Record not found"; uuid = [Some UUID]; container ID = [Some Container ID]

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

这是一个错误,还是我应该像这样(defaultOwner)以其他方式从 recordID 获取记录?

编辑(添加示例代码)

- (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 日

这是一个错误。

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

最佳答案

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

您可以做的是首先测试 eachRecord.creatorUserRecordID.recordName == "defaultOwner"是否是这样,您可以获取从 currentUserRecordID 获得的 ID 的记录

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

关于ios - CloudKit:CKRecord 问题(或错误?)的 creatorUserRecordID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29597755/

相关文章:

cloudkit - Xcode 14 RC : Not entitled to listen to push notifications. 突然出错 请添加 'aps-connection-initiate' 授权

CloudKit - 如何检索刚刚使用 CKModifyRecordsOperation 保存的记录的 ckRecordID

ios - 我如何在 CloudKit 中创建一个记录作为 child 的记录列表?

ios - 自定义表格单元格重用/出队

iphone - Objective C/iPhone - Date Time Picker 如何格式化它的日期(例如 strip YYYY)以及如何检索这些格式?

ios - 我可以将 in.xyz 作为包 ID 吗?

objective-c - CloudKit 批量获取?

ios - 为什么我在 iOS 中的 DateComponents 对象不能正确地保存到 CloudKit 或从中检索?

ios - PresentShareDialog 返回 nil 的原因是什么?

ios - AV播放器 : change rate with NO pitch correction?