2016-12-25 13 views
0

У меня есть приложение в Android, и я создаю его версию iOS, но когда я пытаюсь извлечь пользовательские данные в класс модели, я получаю сообщение об ошибке, я знаю его, потому что некоторые узлы не имеют все ключи внутри него, но это нормально для Android, я не знаю, как с этим справиться в Swift 3. Вы можете увидеть мои данные по ссылке в конце этого сообщения.Извлечь данные с Firebase ios

Я получаю это делает .childadded:

Fatal error: unexpectedly found nil while unwrapping an Optional value

Это моя модель класса:

struct User { 
var name: String 
var age: String 
var gender: String 
var description: String 
var hair:String 
var skin:String 
var tel:String 

init(name: String, age: String, gender: String, hair: String, skin: String, tel: String, description: String) { 
    self.name = name 
    self.age = age 
    self.gender = gender 
    self.description = description 
    self.hair = hair 
    self.skin = skin 
    self.tel = tel 
} 

init(snapShot: FIRDataSnapshot){ 
    self.name = (snapShot.value! as! NSDictionary)["name"] as! String 
    self.age = (snapShot.value! as! NSDictionary)["age"] as! String 
    self.gender = (snapShot.value! as! NSDictionary)["gender"] as! String 
    self.description = (snapShot.value! as! NSDictionary)["description"] as! String 
    self.hair = (snapShot.value! as! NSDictionary)["hair"] as! String 
    self.skin = (snapShot.value! as! NSDictionary)["skin"] as! String 
    self.tel = (snapShot.value! as! NSDictionary)["tel"] as! String 

} 

func toAnyObject() -> [String: Any]{ 
    return ["name": name, "age": age, "gender": gender, "description": description, "hair": hair, "skin": skin, "tel": tel] 
} 
} 

Это мой выборки код:

ref.child("users").observe(.childAdded, with: { (snapshot) in 
     if(snapshot.value is NSNull){ 

     }else{ 
      let user = User(snapShot: snapshot) 
      print("snapshot not nil: \(snapshot.key) \(snapshot.value)") 
      print("user: \(user.name)") 
     } 

Это будет иметь некоторые данные пустой, как и скин и описание, см.? У меня есть некоторый регистр с меньшим количеством клавиша, в андроиде это нормально, но на стриже наклоняет обрабатывать ноль

Первого регистра работает нормально, но вторая авария My data base

fatal error: unexpectedly found nil while unwrapping an Optional value 2016-12-21 14:13:46.765206 GPMap[6033:1579494] fatal error: unexpectedly found nil while unwrapping an Optional value

+0

Вы включили ссылку на изображение дерева JSON в своем вопросе. Пожалуйста, замените это на фактический JSON как текст, который вы можете легко получить, щелкнув ссылку Экспорт JSON в [вашей консоли базы данных Firebase] (https://console.firebase.google.com/project/_/database/data/) , Наличие JSON в качестве текста делает его доступным для поиска, позволяет нам легко использовать его для тестирования с вашими фактическими данными и использовать его в нашем ответе, и в целом это просто хорошая вещь. –

ответ

1

Измените функцию, чтобы выглядеть это, чтобы проверить, если значения присутствуют:

init(snapShot: FIRDataSnapshot){ 

    self.name = (snapshot.value as? NSDictionary)?["name"] as? String ?? "" 

    // ... continue for other values 

} 

Тогда вам не нужно, чтобы проверить, если значения не равны нулю (поэтому нет ошибки):

ref.child("users").observe(.childAdded, with: { (snapshot) in 

     let user = User(snapShot: snapshot) 

     // use the method from User to parse the data 
     let userData = user.toAnyObject() 
     print(userData) //Dictionary of data variables 

     print("snapshot not nil: \(snapshot.key) \(snapshot.value)") 
     print("user: \(user.name)") 

    }) 
+0

Цель использования let user = Пользователь (snapShot: моментальный снимок) - разобрать всю информацию в одном linem, я сделаю этот тест. – brunocortes06

+0

Я сконфигурировал код для вас, попробуйте сейчас –

+0

Tks @ Nathan-levitt, это работает, но его еще не то, что я хочу, то есть пользователь этого класса модели User для анализа всех данных. – brunocortes06

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