2016-09-08 2 views
1

У меня есть вопрос о Append Firebase data to an array in Swift ios. Когда я запускаю этот код с использованием queryEqualToValue для данных, приведенных в гиперссылке, он дает количество элементов, которое имеет queryCount. Тем не менее, я хочу, чтобы все элементы были в массиве.Добавить данные Firebase в массив с использованием queryEqualToValue в Swift

Например, когда я запускаю kısıt(3), я хочу получить все значения HHtype в случае Sesgrup = 3. И сохраните эти элементы в массиве. Можете ли вы мне помочь?

У меня есть данные, как показано ниже:

{ 
    "1400001" : { 
    "HHtype" : 3, 
    "Sesgrup" : 4, 
    "lg_Et harcaması" : 0, 
    "lg_Total Harcama" : 3.11 
    }, 
    "1400002" : { 
    "HHtype" : 1, 
    "Sesgrup" : 4, 
    "lg_Et harcaması" : 1.2, 
    "lg_Total Harcama" : 3.15 
    }, 
    "1400004" : { 
    "HHtype" : 3, 
    "Sesgrup" : 4, 
    "lg_Et harcaması" : 1.18, 
    "lg_Total Harcama" : 3.06 
    }, 
    "1400005" : { 
    "HHtype" : 4, 
    "Sesgrup" : 3, 
    "lg_Et harcaması" : 2.21, 
    "lg_Total Harcama" : 3.74 
    }, 
    ....... (9000unit) 

код последнего ответа:

func kısıt(sesNotoSet: UInt){ 

    var rootRef: FIRDatabaseReference! 
    var haneRef: FIRDatabaseReference! 
    var numbersArray = [Int]() 

    self.sesNo = sesNotoSet 



    rootRef = FIRDatabase.database().reference() 
    haneRef = rootRef.child("SES2014") 

    var queryCount : UInt = sesNotoSet 
    haneRef.queryOrderedByChild("Sesgrup").queryEqualToValue(queryCount).observeEventType(.ChildAdded, withBlock: { (snapshot) in 
     print(snapshot) 

     if let HHtypeDict = snapshot.value! as? [String:AnyObject]{ 
      for each in HHtypeDict{ 
       numbersArray.append(each.1["HHtype"] as! Int) 
      } 

      queryCount -= 1 
      if queryCount <= 0 { 
       print(numbersArray) 
      } 


     } 

    }) 



} 

Данная ошибка: fatal error: unexpectedly found nil while unwrapping an Optional value и print(snapshot) только:

Snap (1400005) { 
    HHtype = 4; 
    Sesgrup = 3; 
    "lg_Et harcamas\U0131" = "2.21"; 
    "lg_Total Harcama" = "3.74"; 
} 

Однако, моментальный снимок должен содержать 425 элементов, таких как

+1

Это очень сбивает с толку «Когда я запускаю этот код с помощью queryEqualToValue для данных, приведенных в гиперссылке, она дает ряд элементов, которые queryCount есть. Тем не менее, я хочу, чтобы все элементы были в массиве. Можете ли вы мне помочь в этом? »Поддерживайте его с помощью некоторого примера !!! – user2884707bond

+0

Спасибо за ваши отзывы. Я обновил его –

+0

В основном вы просто захватываете переменную моментального снимка, как вы делаете. Для (элемент var в моментальном снимке) {print (item)} Это может или не поможет. Просто стоит попробовать, что возвращается блок завершения. – user2884707bond

ответ

0

Попробуйте это: -

func kısıt(sesNotoSet: UInt){ 

    var rootRef: FIRDatabaseReference! 
    var haneRef: FIRDatabaseReference! 
    var numbersArray = [Int]() 

    self.sesNo = sesNotoSet 



    rootRef = FIRDatabase.database().reference() 
    haneRef = rootRef.child("SES2014") 

    var queryCount : UInt = sesNotoSet 
    haneRef.queryOrderedByChild("Sesgrup").queryEqualToValue(queryCount).observeEventType(.ChildAdded, withBlock: { (snapshot) in 


     if let HHtypeDict = snapshot.value! as? [String:AnyObject]{ 
      for each in HHtypeDict{ 
      numbersArray.append(each.1["HHtype"] as! Int) 
       } 

     queryCount -= 1 
     if queryCount <= 0 { 
      print(numbersArray) 
     } 

     } 

    }) 



} 
+0

Есть ошибка (Type '(String, AnyObject)' не имеет элементов подстроки для каждый ["HHtype"]) в коде "numbersArray.append (каждый [" HHtype "] as! Int)" –

+0

Я обновил свой ответ, но обновляю ваш вопрос с помощью древовидной структуры DB JSON вашей базы данных ... В противном случае это насколько я могу вам помочь. – Dravidian

+0

Также распечатайте снимок, который вы получите в блоке 'observEventType', и вставьте его в свой Q выше .. Вопрос не здесь в комментариях. – Dravidian

Смежные вопросы