2016-09-29 4 views
0

Ich versuche gerade, den Code für einen Udemy-Kurs zu aktualisieren, den ich vor ein paar Monaten gekauft habe und der in der Swift 2.2-Version voll funktionierte. Allerdings habe ich Probleme mit dieser speziellen Funktion, die nur die letzten Chats sortiert und anzeigt (mit Vorschau). HierUpdate-Datum Sortierung Alternative

ist der Code:

func loadRecents() { 
     firebase.child("Recent").queryOrderedByChild("userId").queryEqualToValue(backendless.userService.currentUser.objectId).observeEventType(.Value, withBlock: { 
      snapshot in 

      self.recents.removeAll() 

      if snapshot.exists() { 

       let sorted = (snapshot.value!.allValues as NSArray).sortedArrayUsingDescriptors([NSSortDescriptor(key: "date", ascending: false)]) 

       for recent in sorted { 

        self.recents.append(recent as! NSDictionary) 
        firebase.child("Recent").queryOrderedByChild("chatRoomID").queryEqualToValue(recent["chatRoomID"]).observeEventType(.Value, withBlock: { 
         snapshot in 
        }) 

       } 

      } 

      self.tableView.reloadData() 
     }) 

    } 

ich den Fehler hier:

let sorted = (snapshot.value!.allValues as NSArray).sortedArrayUsingDescriptors([NSSortDescriptor(key: "date", ascending: false)]) 

Ich glaube, die sortedArrayUsingDescriptors veraltet ist, aber ich bin immer noch nicht sicher. Was könnte ein Ersatz für diesen aktuellen Code sein?

Vielen Dank im Voraus!

Update:

Dies ist der Fehler Ich erhalte:

THread 1: EXC_BAD_INSTRUCTION(code=EXC_I386_INVOP, subcode=0x0) 
+0

Wenn Sie die genauen Fehler vom Compiler hinzufügen könnten die Sie erhalten, dies Ihre Chancen auf eine richtige Antwort erhöhen würde. – torinpitchers

+0

@torinpitchers Die Antwort wird jetzt aktualisiert. Ich bekomme diesen Fehler: EXC_BAD_INSTRUCTION (Code = EXC_I386_INVOP, Subcode = 0x0) – askaale

Antwort

0

Die spezifische Antwort auf die Frage:

let sorted = ((snapshot!.value! as AnyObject).allValues as NSArray) 
     .sortedArray(using: [NSSortDescriptor(key: "date", ascending: false)]) 

auch: was ein Ersatz (in Swift 3) , funktioniert der Code im Grunde funktioniert - obwohl der Code innerhalb der für kürzlich in sortierten Abschnitt für Swift 3.

falsch ist

Letzte ["ChatRoomID"] in diesem Abschnitt kann ein Problem sein, da die Daten innerhalb sortiert möglicherweise keine Zeichenfolgen - sie können Wörterbücher sein. Es hängt von Ihrer Firebase-Struktur ab.

Schließlich ist es wahrscheinlich eine gute Idee, Ihre Abhängigkeit von NSSortDescriptors usw. zu reduzieren und dies auf eine Swifty-Weise zu tun.

Siehe meine Antwort auf Ihre vorherige Frage

Swift 3 Firebase update code convertion - sorting

+0

Hmm, ich verstehe. Der Code scheint jetzt jedoch zu laufen - er zeigt mehrere 'neuere' Zellen mit dem gleichen Wert. Ihre Antwort auf meinen vorherigen Post - scheint ein bisschen zu sein, da die Struktur des Snapshots [String: AnyObject] ist. Irgendeine Idee, wie ich den Code für "neu" nicht falsch machen könnte? – askaale

+0

@askalee Eigentlich ist die Antwort im Voraus richtig, basierend auf der Struktur, die in der Antwort steht (das könnte [String: AnyObject] oder [String: [String: String]] sein wie gepostet. Aber wir wissen immer noch nicht die Firebase-Struktur, mit der Sie arbeiten AnyObject könnte buchstäblich jedes Objekt sein - ein String, ein Array, ein Dictionary oder sogar ein Dictionary-Wörterbuch. Die Struktur Ihrer Beiträge ist immer hilfreich. Können Sie Ihre Frage aktualisieren und Ihre FireBase-Struktur einbeziehen? – Jay