2016-02-09 7 views
8

Ich habe einen einzigen Datensatz in meiner öffentlichen (Entwicklungs-) Datenbank mit mehreren ausgefüllten Feldern. Wenn ich einen CKFetchRecordsOperation verwende, um diesen Datensatz abzurufen, ist der Abruf erfolgreich, aber der resultierende CKRecord enthält immer keine Schlüssel. Dies passiert, wenn ich explizit desiredKeys auf meine Abrufoperation setzen, oder es als Null belassen. Der Datensatz und seine Schlüssel sind seit langer Zeit unverändert, es handelt sich also nicht um eine Laufzeitverzögerung.CKFetchRecordsOperation gibt nie irgendwelche Schlüssel zurück

Es gibt nur einen Datensatz in der öffentlichen Datenbank und seine ID stimmt mit dem überein, was ich bekomme, daher bin ich sicher, dass der richtige Datensatz abgerufen wird. es hat einfach nie irgendwelche Schlüssel. Der folgende Code gibt beispielsweise immer keys: [] aus.

let op = CKFetchRecordsOperation(recordIDs:[...]) 
op.desiredKeys = [...] // commenting this has no effect 
op.fetchRecordsCompletionBlock = {records, error in 
    if let e = error { 
     print("error:", e)} 
    for (id, r) in records ?? [:] { 
     print("keys:", r.allKeys())}} 
db.addOperation(op) 

Ich habe auch die einzelnen Tasten über die Index-Notation Zugriff versucht, aber sie sind immer nil. Ich bin zu diesem Zeitpunkt ratlos. Es gibt keine Fehler, und der Datensatz, den ich möchte, wird gefunden, warum gibt es dann nie irgendwelche Schlüssel?

Update: Ich habe festgestellt, dass das CloudKit Dashboard immer wieder "Reindexing Entwicklung" in der unteren linken Ecke sagt, sogar Tage nach meiner letzten Änderung. Außerdem habe ich versucht, einen zweiten Datensatz (über das Dashboard) zu erstellen, und mein Abruf findet es nicht einmal, nachdem ich genügend Zeit für die Verbreitung gelassen habe.

Nach einem Link von this SO question zu einem Apple developer forum thread zu diesem Problem, fand ich einen Beitrag darauf hindeutet, dass es nur mit Datensätzen mit Asset-Feldern passiert. Ich werde versuchen, zu experimentieren, wenn ich Zeit habe, obwohl ich nicht vermeiden kann, Assets in diesem Fall zu verwenden, damit es nicht viel hilft.

Update 2: Ich habe versucht, meine Entwicklungsumgebung zurückzusetzen und dann die gleichen Datensätze wie zuvor neu zu erstellen. Auf der positiven Seite ist die "Reindexing" Nachricht im CloudKit Dashboard endgültig weg. Leider kann mein Code jetzt keine meiner Aufzeichnungen finden, obwohl der Code unverändert bleibt und ich alles dreifach überprüft habe.

Ich habe auch versucht, einen Datensatztyp ohne Asset Felder erstellen (siehe erste Aktualisierung oben), aber es schien nichts zu ändern.

+0

Nur um das Offensichtliche zu fragen, wenn Sie sich den Datensatz im CloudKit Dashboard ansehen, können Sie den Datensatz sehen und der Datensatz hat spezifische Werte für bestimmte Schlüssel? – rmaddy

+0

Ja. [Padding zur Erfüllung der SO] – phu

+0

Eine andere offensichtliche Frage: Ich nehme an, dass die Abfrage-Checkboxen auf den Schlüsseln in CloudKit Dashboard überprüft werden? –

Antwort

0

Es stellte sich heraus, dass ich die private Datenbank abgefragt habe, als die Datensätze, die ich wollte, in der Öffentlichkeit waren.

Verwandte Themen