WebHU - Programozási kérdések és válaszok

SWIFT: Adatok nyomtatása a Firebase adatbázisból táblázatnézetben

Új vagyok a firebase-ben. Szeretnék létrehozni egy alkalmazást a Firebase-adatbázisomból származó adatokkal, hogy megjelenjen a táblázatban.

Példa:

Tegyük fel, hogy készítettem egy adatbázist, amely így néz ki:

{
  "fruits": {
    "Apple": {
      "color": "Red",
      "taste": "Bla bla...",
    },
    "Banana": {
      "color": "Yellow",
      "taste": "Bla bla...",
    },
    "Pear": {
      "color": "Green",
      "taste": "Bla bla...",
    },
  }
}

A Firebase automatikusan ábécé sorrendbe rendezi az adatbázisom elemeit. Most egy táblázatot szeretnék készíteni az összes gyümölcs ABC sorrendben. Amikor megérintek egy gyümölcsöt, egy új ablak jelenik meg az adott gyümölcsre vonatkozó információkkal, például "szín", "íz", stb. (mint több fajta gyümölcs), folyamatosan ábécé sorrendben kell megjelennie. Elolvastam a dokumentációt, de szerencsétlenül.

Hogyan csináljam ezt? Tudom, hogyan kell táblázatnézeteket és adatbázisokat készíteni. De hogyan kapcsolhatom össze az adatbázisomat a táblázatnézetemhez, és hogyan tudom kinyomtatni az adataimat a-z-től? esetleg indexszámmal?

Köszönöm. :-)


Válaszok:


1

Érdemes megfontolni egy másik szerkezetet

fruits
  fruit_id_0  <- key created with childByAutoId
    name: "Apple"
    color: "Red"
    taste: "blah blah"

Innentől kezdve rengeteg lehetőséged van.

Az egyik lehetőség a .childAdded használata, amely az összes csomóponton áthalad, egyenként, és hagy egy megfigyelőt, aki értesíti az alkalmazást, ha új gyermeket adnak hozzá. A dataSource tömb név szerint van rendezve a kódban.

let fruitsRef = self.ref.child("fruits")
fruitsRef.observe(.childAdded, with: { snapshot in
    let fruitDict = snapshot.value as! [String: Any]
    let fruitName = fruitDict["name"] as! String
    self.fruitArray.append(fruitName)
    self.fruitArray.sort() //sorts in place
    self.myTableView.reloadData()
})

Innentől kezdve, amikor új gyümölcsöt adnak hozzá, a bezárást hívják. Az újonnan hozzáadott gyümölcs hozzáadódik, a tömb rendeződik, és a felhasználói felület frissül.

Ha csak néhány bejegyzése van, a fenti rendben van, de ha sok gyümölcse van, mint én, akkor minden egyes gyümölcs betöltése után rendezi és frissíti a tableView-t, ami villogást vagy más nem kívánt eredményt okozhat.

Jobb megoldás lenne kihasználni azt a tényt, hogy az .value megfigyelők a .gyermek megfigyelők hozzáadását követően jelennek meg. Ezt szem előtt tartva betöltheti a teljes kezdeti adatkészletet, és ha ez kész, rendezze azt, és frissítse a tableView-t. Ezzel egyidejűleg egy megfigyelőt hagy az új gyümölcsök számára, amely hozzáadja azt az adatforráshoz, rendezi és frissíti a felhasználói felületet.

Íme néhány kód, amely gombkattintással indítható el

   func button0() {
      self.configureChildAdded()
      self.setInitialLoadCompleted()
   }

két osztályvar, hogy nyomon kövessük, hol tartunk a betöltési folyamatban, és egy tömb a gyümölcsnevek tárolására

var initialLoad = true
var fruitArray = [String]()

majd két osztály, amely kezdetben betölti és rendezi a gyümölcsöket, és hagy egy .childAdded megfigyelőt, amely figyeli a további gyümölcsöket, és hozzáadja őket az adatforráshoz, rendezi és frissíti a táblázatot.

func configChildAdded() {
    let fruitsRef = self.ref.child("fruits")
    fruitsRef.observe(.childAdded, with: { snapshot in //iterate over all fruits
        let fruitDict = snapshot.value as! [String: Any]
        let fruitName = fruitDict["name"] as! String
        self.fruitArray.append(fruitName)

        //upon first load, don't reload the tableView until all children are loaded
        if ( self.initialLoad == false ) {
            self.fruitArray.sort()
            self.myTableView.reloadData()
        }
    })
}

//this .value event fires AFTER the child added events to load the tableView the first time
//  all this does is update the UI and set the initalLoad to true and only fires once
func setInitialLoadCompleted() {
    let fruitsRef = self.ref.child("fruits")
    fruitsRef.observeSingleEvent(of: .value, with: { snapshot in
        self.myTableView.reloadData()
        self.initialLoad = false
    })
}

Ne feledje, hogy ezzel a módszerrel teljesen elkerülhető a Firebase bármilyen típusú rendezése, ahogy az a kódban történik. Ez sokkal könnyebbé tenné a több mezős rendelést stb.

08.08.2018
Új anyagok

A rádiógomb ellenőrzött eseményének használata a jQueryben
Ebben a cikkben látni fogjuk, hogyan kell dolgozni a jquery választógombbal ellenőrzött eseményeivel. A választógombok HTML gombok, amelyek segítenek kiválasztani egyetlen értéket egy csoportból...

Körkörös függőségek megoldása terraformban adatforrásokkal – lépésről lépésre
Mi az a körkörös függőségek Dolgozzunk egy egyszerű eseten, amikor az SQS-sor és az S3-vödör közötti körkörös függőség problémája van egy egymástól függő címkeérték miatt. provider..

Miért érdemes elkezdeni a kódolást 2023-ban?
01100011 01101111 01100100 01100101 — beep boop beep boop Világunk folyamatosan fejlődik a technológia körül, és naponta fejlesztenek új technológiákat a valós problémák megoldására. Amint..

🎙 Random Noise #2  – Örökbefogadás és hit
az analitika íratlan világának gondozása Szeretné, hogy ezek a frissítések a postaládájába kerüljenek? Iratkozzon fel itt . "Ha önvezető autókat gyártanak, akkor mi miért ne..

A legrosszabb politika és prediktív modellek májátültetésre jelöltek számára az Egyesült Államokban
A máj (vagy óangolul lifer) az emberi test legnehezebb belső szervére utal, amely csendesen működik a nap 24 órájában. Mit csinál a máj? 500 feladatot hajt végre a szervezet egészségének..

5 webhely, amely 2022-ben fejleszti front-end fejlesztői készségeit
Frontendmentor.io A tényleges projektek létrehozásával a Frontendmentor.io segítséget nyújt a front-end kódolási képességeinek fejlesztésében. A kódolást azután kezdheti meg, hogy..

Mikor kell használni a Type-t az interfészhez képest a TypeScriptben?
A TypeScript a JavaScript gépelt szuperkészlete, amely statikus gépelést ad a nyelvhez. Ez megkönnyíti a robusztus és karbantartható kód írását azáltal, hogy a hibákat a fordítási időben..