ユーザーが場所を保存できるようにしています。それはcloudKitに保存されており、すべての場所を正常に取得できます。保存された場所ごとに、「作成者: IDXXX」という作成者のレコードがあります。それを作成した単一のユーザーによって保存されたすべての場所を取得するにはどうすればよいですか?
CloudKit には、場所とユーザーの 2 つのレコード タイプがあります。場所が保存されると場所として保存され、CKReference を使用してユーザーのレコード ID への参照を、属性タイプ「参照」の属性名の「owningList」としてマークした場所のフィールドに追加します。以下のこのメソッドは、新しい保存された場所の CKRecord を取得して新しい場所が保存されるときに呼び出されます。
- (void)saveLocationToUserWithLocationRecord:(CKRecord *)locRecord {
CKReference *ref = [[CKReference alloc] initWithRecordID:self.userRecordID action:CKReferenceActionDeleteSelf];
[locRecord setObject:ref forKey:@"owningList"];
}
次に、ユーザーのレコード ID である CKReference とフィールド名「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);
}
}];
}