2016-10-02 1 views
0

Я попытался преобразовать свой код funcfunc в Swift 3. Должен сказать, что у меня был полностью работающий проект раньше. Теперь у меня проблема, когда у меня нет ошибок и только некоторые предупреждения, но некоторые из функций не выполняются. Что должно вызывать это?Firebase и Swift 3 код не работает

Я предполагаю, что эти функции неисправны, потому что это части, где я ничего не получаю print.

Вот некоторые из моих функций, которые работали раньше, но не с Swift 3:

//With this I get selected brand products values like product name, nicotine, flavor etc.. 
let ref = FIRDatabase.database().reference().child("Snuses").queryOrdered(byChild: "Brand").queryEqual(toValue: brandName) 
     ref.observeSingleEvent(of: .value, with: { (snapshot) in 
      if snapshot.exists(){ 
       if let products = (snapshot.value as AnyObject).allValues as? [[String:AnyObject]]{ 
        self.productsValue = products 
        self.productsTable.reloadData() 
       } 
      } 
    }) 

//With this fucntion I get the products count. 
    let ref = FIRDatabase.database().reference().child("Snuses").queryOrdered(byChild: "Brand").queryEqual(toValue: filteredBrands[indexPath.row]) 
       ref.observeSingleEvent(of: .value, with: { (snapshot) in 
        if snapshot.exists(){ 
         if let products = (snapshot.value as AnyObject).allValues as? [[String:AnyObject]]{ 

           var count = (snapshot.childrenCount) 
           snusProductCountLabel.text = "\(count) products" 

         } 
        } 
       }) 

//Parse snus brands 
    func parseSnuses(){ 
     let ref = FIRDatabase.database().reference().child("Brands").queryOrderedByKey() 

     ref.observe(.childAdded, with: { (snapshot) in 
      self.brands.append(snapshot.key) 
      print(snapshot.key) 
      self.snusBrandsTableView.reloadData() 
     }){ (error) in 

     } 

Все, что я могу сделать разные, пожалуйста, скажите мне! Эти функции находятся в разных ViewControllers.

Edit: это мой JSON дерево

{ 
    "Snuses" : { 
    "Catch Eucalyptus White Large" : { 
      "Brand" : "Catch", 
      "Products" : "Catch Eucalyptus White Large", 
      "PorionWeight" : 21.6, 
      "flavor" : "Tobacco, Eucalyptus", 
      "nicotine" : 8.0, 
      "PortionsCan" : 24, 
      "shipping weight" : 39 
     }, 

И это правила безопасности:

{ 
    "rules": { 
    ".read": "true", 
    ".write": "true", 
    "Snuses": { 
     ".indexOn": "Brand" 
    } 
    } 
} 
+0

Что именно вы видите, с точки зрения ошибок? Неясно, в чем проблема ... – BHendricks

+0

Нет ошибок, только код ничего не дает. –

+0

Что значит «код, не дающий ничего», значит? Что должен сделать код «дать вам»? – BHendricks

ответ

2

Я считаю, что

if let products = (snapshot.value as AnyObject) 
        .allValues as? [[String:AnyObject]]{ 

является проблемой.

Попробуйте это как тест, чтобы увидеть, если он печатает данные из снимка:

let ref = FIRDatabase.database().reference().child("Snuses") 
       .queryOrdered(byChild: "Brand").queryEqual(toValue: brandName) 
     ref.observeSingleEvent(of: .value, with: { (snapshot) in 
      if snapshot.exists() { 

       let dict = snapshot?.value as! [String: [String:String]] 
       let productsArray = Array(dict) 

       for row in productsArray { 
        print(row) 
       } 
      } 
}) 

для не-Swifty теста, вы также можете попробовать это внутри затвора вместо вышеуказанного

let d2 = snapshot?.value as! NSDictionary 
let a2 = d2.allValues 

for r2 in a2 { 
    print(r2) 
} 

еще один вариант:

let q = snapshot?.value as! [String: AnyObject] 
let a3 = Array(q) 

for r3 in a3 { 
    print(r3) 
} 

Я не знаю, что ваш Tableview ожидает в массиве, но один из я ose должен покрыть его.

+0

Это создает новые проблемы, такие как: «InvalidQueryParameter», причина: «Вы можете передавать только nil, NSString или NSNumber в queryEqualToValue:« если вы хотите, я могу поделиться своим репо в Github и иметь некоторое время. –

+0

Вам нужно будет определить brandName = что-то перед выполнением этого кода. Код работает для меня. – Jay

+0

Абсолютно: D Я сделал это. Моим «brandName» является indexPath.row. И я сделал это. –

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

  • Нет связанных вопросов^_^