CloudKit关系CKReference设置和查询。

时间:2015-04-07 04:31:27

标签: objective-c cloudkit ckquery ckreference

我允许用户保存位置。它保存在cloudKit中,我可以成功获取所有位置。对于保存的每个位置,都有一条创建它的记录“由IDXXX创建”。如何提取创建它的单个用户保存的所有位置?

在CloudKit中我有2种记录类型,位置和用户。保存位置时,它将保存为位置,并使用CKReference将用户记录ID的引用添加到位置中的字段,该字段已标记为属于具有属性类型“Reference”的属性名称的“owningList”。当保存新位置以获取新保存位置的CKRecord时,将调用以下方法。

- (void)saveLocationToUserWithLocationRecord:(CKRecord *)locRecord {

    CKReference *ref  = [[CKReference alloc] initWithRecordID:self.userRecordID action:CKReferenceActionDeleteSelf];

    [locRecord setObject:ref forKey:@"owningList"];

}

然后我尝试使用谓词指定CKReference获取所有位置,CKReference是用户的记录ID,字段名称为“owningList”,并且不返回任何结果。我尝试了其他方法没有成功。我对此非常新,任何帮助或澄清将不胜感激。

-(void)fetchUsersSavedLocations:(CKRecordID *)ID {

    CKDatabase *database = [[CKContainer defaultContainer] publicCloudDatabase];

    CKReference* recordToMatch = [[CKReference alloc] initWithRecordID:ID

                                                                action:CKReferenceActionDeleteSelf];

    NSPredicate* predicate = [NSPredicate predicateWithFormat:@"%K == %@", @"owningList", recordToMatch];

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

    [database performQuery:query inZoneWithID:nil completionHandler:^(NSArray *results, NSError *error) {

        if (!error) {
            NSLog(@"SUCCESS results %@”, results);
        }
        else {
            NSLog(@"failed with error %@", error);
        }

    }];

}

0 个答案:

没有答案