2017-03-10 13 views
1

이상한 문제가 있습니다. Firebase DB에 일부 데이터가 설정되어 있습니다.Swift 3 Firebase DB 읽기 데이터 문제

나는 구조체과 같이 구성한 :

func getTrackData() { 

    let result = FIRDatabase.database().reference(withPath: "tracks") 
    result.observe(.value, with: { snapshot in 
     var newItems: [newTracks] = [] 
     print(newItems) 

     for item in snapshot.children { 
      let trackDetails = newTracks(snapshot: item as! FIRDataSnapshot) 
      newItems.append(trackDetails) 
      } 
     print(newItems) 

     self.items = newItems 
     self.tableView.reloadData() 
     }) 
} 

현재 내가하는 옵션 값을 풀기 동안 예기치 않게 NIL을 발견 "점점 오전 : 이것은 때라도 코드 내의 ViewController에 참조

import Foundation 
import FirebaseDatabase 

struct newTracks { 


let name: String! 
let trackId: Int! 
let postcode: String! 
let trackType: String! 
let locID: Int! 
let lat: Double! 
let lon: Double! 
let phoneNumber: String! 
let email: String! 
let rating: Double! 
let ref: FIRDatabaseReference? 



init(name: String, trackId: Int, postcode: String, trackType: String, trackURL: String, locID: Int, lat: Double, lon: Double, phoneNumber: String, email: String, rating: Double) { 
    self.name = name 
    self.trackId = trackId 
    self.ref = nil 
    self.postcode = postcode 
    self.trackType = trackType 
    self.locID = locID 
    self.lat = lat 
    self.lon = lon 
    self.phoneNumber = phoneNumber 
    self.email = email 
    self.rating = rating 

} 

init(snapshot: FIRDataSnapshot) { 
    let snapshotValue = snapshot.value as! [String: AnyObject] 
    print(snapshotValue) 
    name = snapshotValue["name"] as! String 
    trackId = snapshotValue["id"]as! Int 
    postcode = snapshotValue["postcode"]as! String 
    trackType = snapshotValue["type"]as! String 
    locID = snapshotValue["locID"]as! Int 
    lat = snapshotValue["lat"]as! Double 
    lon = snapshotValue["long"]as! Double 
    phoneNumber = snapshotValue["phone"]as! String 
    email = snapshotValue["email"]as! String 
    rating = snapshotValue["rating"]as! Double 
    ref = snapshot.ref 

} 

func toAnyObject() -> Any { 
    return [ 
     "name": name, 
     "trackId": trackId, 
     "postcode": postcode, 
     "trackType": trackType, 
     "locID": locID, 
     "lat": lat, 
     "lon": lon, 
     "phoneNumber": phoneNumber, 
     "email": email, 
     "rating": rating 
      ] 
} 

} 

"나는 왜 그것을 얻고 있는지를 알았다. 첫 번째 코드 블록에서 다음 줄이 실행되기 때문이다.

print(snapshotValue) 
,516,

다음과 같은 결과가 생산됩니다

"["이름 ": J4M54,"이메일 "[email protected],"우편 번호 "TF11 1XX,"등급 ": 1,"유형 "토양" "long": -2.398844, "id": 8, "phone":, "locID": 353823, "lat": 52.679089, "spare": 아니오, "jetwash" 클럽 ": 연습 트랙]

["등급 : 나와 많은 있기 때문에 "4]"

이 결과의 스 니펫이다.

그것은 팬텀 결과 "

이 나던 내 DB에 존재 나는 시도 내 DB를 다시.. [4"등급 "] 문제는 결과

의 맨 마지막 부분입니다 내 JSON의 백업, 그냥 나던이 결과를 사용하여 데이터는 데이터의 아무 곳이나 존재, 그래서 그것을 제거하는 방법을 모르겠어요. 어떤 도움도 대단히 감사하겠습니다

.

+0

은 왜 그냥 failable 이니셜을 넣어와 전무 체크 표시를하지 못할 지금 잘? –

+0

Im은 팬텀 데이터가 어디에서 호출되는지에 대해 주로 염려합니다. –

답변

0

가 해결, I 내 AppDelegate에서 DB 지속성을 유지했으며 값을 저장했습니다. 나는 지속성을 소등 DB

와 쓰기를하고 있던 몇 가지 작업 후 전자의