12

現在、アプリにCloudKitをセットアップしているので、以下のコードを使用して新しいレコードを追加しています。

CKRecordID *recordID = [[CKRecordID alloc] initWithRecordName:@"stringArray"];
CKRecord *record = [[CKRecord alloc] initWithRecordType:@"Strings" recordID:recordID];
[record setObject:[NSArray arrayWithObjects:@"one", @"two", @"three", @"four", nil] forKey:@"stringArray"];
[_privateDatabase saveRecord:record completionHandler:nil];

ただし、同じレコード タイプ「文字列」のすべてのレコードをフェッチし、NSArray にコンパイルされたレコードを返すことができるようにしたいと考えています。どうすればそれを行うことができますか?現在、私が理解しているのは、recordID を使用して各レコードを個別に取得する方法だけです。これは面倒です。もっと簡単な方法があるはずです。

[_privateDatabase fetchRecordWithID:recordID completionHandler:^(CKRecord *record, NSError *error) {
   if (error) {
      // Error handling for failed fetch from private database
   }
   else {
      NSLog(@"ICLOUD TEST: %@", [record objectForKey:@"stringArray"]);            
  }
}];
4

6 に答える 6

9

ああ、私はそれを手に入れました。以下のコードを使用して、データベースで実行するクエリを作成し、完了ブロックで NSArray を返すことができました。これをループし、保存されたキーの値を NSLog で返しました。

NSPredicate *predicate = [NSPredicate predicateWithValue:YES];
CKQuery *query = [[CKQuery alloc] initWithRecordType:@"Strings" predicate:predicate];

[_privateDatabase performQuery:query inZoneWithID:nil completionHandler:^(NSArray *results, NSError *error) {
    for (CKRecord *record in results) {
        NSLog(@"Contents: %@", [record objectForKey:@"stringArray"]);
    }
}];
于 2015-02-09T04:50:43.323 に答える
7

Swift 4のソリューションは、タイプ「YourTable」のすべてのレコードを取得する方法を示し、また、次のように出力System FieldCustom Fieldます。

let query = CKQuery(recordType: "YourTable", predicate: NSPredicate(value: true))
CKContainer.default().publicCloudDatabase.perform(query, inZoneWith: nil) { (records, error) in
  records?.forEach({ (record) in

    // System Field from property
    let recordName_fromProperty = record.recordID.recordName
    print("System Field, recordName: \(recordName_fromProperty)")

    // Custom Field from key path (eg: deeplink)
    let deeplink = record.value(forKey: "deeplink")
    print("Custom Field, deeplink: \(deeplink ?? "")")
  })
}
于 2018-01-15T03:37:49.017 に答える