2016-04-13 2 views
0

У меня возникли трудности с тем, чтобы включить firebase в контроллер. Firebase работает правильно из-за того, что я могу распечатать на консоли. Мне нужно иметь возможность отображать все данные в моем приложении. Пожалуйста помогите! // // All.swift // Гарантированный Ценообразование //Как отобразить информацию о firebase в моем iOS swift listview?

enter image description here

import Foundation 
import UIKit 
import Firebase 

class All: UINavigationController, UITableViewDataSource, UITableViewDelegate { 

var items: [String] = [] 
var tableView: UITableView! 
let cellIdentifier = "CellIdentifier" 

override func viewDidLoad(){ 
    super.viewDidLoad() 

    self.tableView = UITableView(frame:self.view!.frame) 
    self.tableView!.delegate = self 
    self.tableView!.dataSource = self 
    self.tableView!.registerClass(UITableViewCell.self, forCellReuseIdentifier: cellIdentifier) 
    self.view?.addSubview(self.tableView) 

    let ref = Firebase(url:"https://sizzling-inferno-451.firebaseio.com/services") 
    ref.observeSingleEventOfType(.Value, withBlock: { snapshot in 
     for child in snapshot.children { 

//    let key = child.key //returns -Jikaijsipaij and -kalksdokoas 
//    let name = child.value.objectForKey("service_name") as NSString? 
////     
//    self.items.append(key) 
     } 
     // do some stuff once 
     print(snapshot.value) 

     // get these values and put them in the cell's text view. key is more important 
     print(snapshot.key) 



     // add to the array and just this array 


     self.tableView!.reloadData() 
    }) 
} 

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    return items.count 
} 


func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 

    let cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier, forIndexPath: indexPath) 

    // Fetch Fruit 
    let fruit = items[indexPath.row] 

    // Configure Cell 
    cell.textLabel?.text = fruit 
    return cell 
} 

// onclick printing 
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
    print(items[indexPath.row]) 
} 

}

+0

Ну, для начала вы не Наполнение массива пунктов (который является источником данных tableView) с любыми данными. Вы хотели бы сделать это в блоке ref.observe. Похоже, ваш код закомментирован, что вы должны использовать, по крайней мере, если вы просто хотите отобразить список ключей. О, и ваша структура Firebase не включает в себя какие-либо ключи, называемые service_name, поэтому вы должны использовать имя ключа, которое существует, например, часы или тип – Jay

+0

Ну код, который я прокомментировал, я пытался смоделировать структуру firebase. Я в конечном итоге пытался его реализовать, но вместо service_name я использовал описание. По какой-то причине я продолжаю получать сообщение об ошибке «значение необязательного типа« AnyObject ?! » не разворачивается, вы хотели использовать «!»? или '?' «. Кроме того, есть ли у вас какие-либо предложения о том, как я могу заполнить массив? Или любая идея, из чего эти ошибки? Firebase работает правильно, и я правильно настроил контроллеры ... Я некоторое время занимался этой ошибкой, и я не уверен, как ее решить. –

+0

Возможно, вам стоит ознакомиться с опциями (?), Поскольку они являются неотъемлемой частью Swift - учебник Apple по переменным и опциям довольно хорош. Я добавил ответ, который должен оказать некоторую помощь. – Jay

ответ

0

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

user_id_0 
    name: "Fred" 
    friend: "Barney" 

И код для чтения во всех пользователях, перебрать их и извлечь каждое имя и добавить его в массив:

var namesArray: [String] = [] 

    ref.observeSingleEventOfType(.Value, withBlock: { snapshot in 
      for child in snapshot.children { 
       let name = child.value["name"] as! String 
       namesArray.append(name) 
      } 
      self.myTableView.reloadData() 
    }) 
Смежные вопросы