2016-07-25 13 views
0

Ich bin unglaublich verärgert und brauche etwas Anleitung. Ich habe momentan eine Swift-App in iOS, die über Heroku von Parse läuft (also stirbt es nicht und das ist nicht der Grund).Swift - Parse Ergebnisse sind jetzt immer leer, waren aber NICHT vorher? Kann Objekt noch posten, aber nicht mit Abfrage bekommen?

Bis gestern ging alles gut. Ich konnte meine Datenbank wie diese lesen und schreiben und es gut geklappt hat:

let ideaPost = PFObject(className: "ideaPosts") 
       ideaPost["mood"] = moodField.text 
       ideaPost["ideaText"] = ideaTextField.text 
       ideaPost.saveInBackgroundWithBlock { (success: Bool, error: NSError?) -> Void in 
        print("Object has been saved.") 

Hier ist meine Datenbank als Beweis:

enter image description here

ich heute all diese Objekte erstellt. Bis heute habe ich genau der Lage, Objekte wie diese abzufragen und empfangen:

ParseHelper.searchPosts(mood!, completionBlock: handleIdea) 

und

static func searchPosts(searchText: String, completionBlock: PFQueryArrayResultBlock) -> PFQuery { 
     /* 
     NOTE: We are using a Regex to allow for a case insensitive compare of usernames. 
     Regex can be slow on large datasets. For large amount of data it's better to store 
     lowercased username in a separate column and perform a regular string compare. 
     */ 

//  let query = PFQuery(className: "ideaPosts").whereKey(("mood"), 
//                matchesRegex: searchText, modifiers: "i") 

     let query = PFQuery(className: "ideaPosts").whereKey(("mood").lowercaseString, 
                  equalTo: searchText.lowercaseString) 

     query.orderByAscending("createdAt") 

     query.findObjectsInBackgroundWithBlock(completionBlock) 


     return query 
    } 

Wie Sie sehen können, Im Verweisen auf die richtige Klasse und richtigen Felder. Nach meinem Wissen (ich war letzte Nacht schnell unterwegs und muss versehentlich etwas berührt haben) habe ich nicht ein bisschen Code geändert. Mein Projekt ist deswegen in Trümmern.

Warum passiert das? Warum sind meine Ergebnisse immer leer? Ich gebe die zurückgegebenen Ergebnisse PFObject aus, da es als leeres optionales Element zurückkam.

Die einzigen 2 Dinge, die ich denken kann, dass ich geändert habe, ist 1. Ich habe mein Projekt umbenannt (also Xcode wurde umbenannt alle meine Ziele, aber ich habe keine Buildfehler oder irgendetwas) Und früher habe ich (einige Zeilen gelöscht) gelöscht) in meinem Tisch.

Ich habe auch eine neue Datenbank/Reihe von Servern zu meinem Konto hinzugefügt Aber auch dies sollte nichts beeinflussen, was ich nicht denke. Ich bin verzweifelt. Was läuft hier falsch?

Ich habe meine Build und alles sogar gereinigt.

+0

Hallo, in Ihrer Abfrage geben Sie an, wo Stimmung equalTo: searchText.lowercaseString, aber wenn ich die Ergebnisse, die Sie unter "Stimmung" Spalte angefügt sehe ich keine Kleinbuchstaben Zeichenfolgen. Ich denke, Sie können nur den KleinbuchstabenString entfernen und mache nur equalTo: searchText. –

Antwort

1

Der Suchcode erzeugt leere Ergebnisse, wenn er versucht, Kleinbuchstaben searchText mit gemischten Falldaten im Stimmungsattribut (was es zu sein scheint) zu entsprechen.

.whereKey(("mood").lowercaseString, equalTo:searchText.lowercaseString) 

Die ersten Operandennamen die Spalte, die verglichen wird, ist, dass "mood", und es ist erwähnenswert, dass ("mood").lowercaseString == "mood"

Die Regex mehr sieht vielversprechend aus. Ist es möglich, dass Sie eine Änderung vorgenommen haben, die Sie kürzlich vorgenommen haben?

Anders als Regex ist die einzige Möglichkeit, die Spalte "Stimmung" mit Groß- und Kleinschreibung zu vergleichen, eine andere Spalte wie mood_i, in der die Daten in Kleinbuchstaben umgewandelt werden müssen, zu suchen. Eine übliche Praxis zum Initialisieren einer solchen Säule ist auf afterSave.

+0

Vielen Dank, ich muss diese beiden Abfragen ausgeschaltet haben. Dennoch neugierig - warum funktioniert der erste nicht, wenn beide kleingeschrieben sind? – skyguy

+0

Gerne helfen. Auf der ersten Seite sind sie nicht beide kleingeschrieben. Dieser erste Parameter ist die Spalte * name *, nicht der Wert. Dieser Code macht das Wort "Stimmung" in Kleinbuchstaben, was es bereits ist. – danh