1
我剛剛更新到Swift 3.0語法和XCode 8.0。
我在更新後重新獲得所有內容時遇到了一些問題,但有一件事我無法修復,那就是當向數據庫寫入數據(特別是圖像)時,出現以下錯誤:Swift Firebase:無法在fileURL中存儲_SwiftValue類型的對象
Terminating app due to uncaught exception 'InvalidFirebaseData', reason: '(setValue:) Cannot store object of type _SwiftValue at fileURL. Can only store objects of type NSNumber, NSString, NSDictionary, and NSArray.'
這是我目前的寫作過程。任何幫助你可以提供將不勝感激!
let roomRef = FIRDatabase.database().reference()
class Data {
static let dataService = Data()
fileprivate var _BASE_REF = roomRef
fileprivate var _ROOM_REF_ = roomRef.child("rooms")
fileprivate var _BASE_REF2 = roomRef
fileprivate var _ROOM_REF_2 = roomRef.child("contents")
var BASE_REF: FIRDatabaseReference {
return _BASE_REF
}
var ROOM_REF: FIRDatabaseReference {
return _ROOM_REF_
}
var storageRef: FIRStorageReference {
return FIRStorage.storage().reference()
}
var fileURL: String!
func createNewPost(_ user: FIRUser, title: String, author: String, date: String, story: String, data: Foundation.Data) {
let filePath = "\(user.uid)/\(Int(Date.timeIntervalSinceReferenceDate))"
let metaData = FIRStorageMetadata()
metaData.contentType = "image/jpg"
storageRef.child(filePath).put(data, metadata: metaData) { (metaData, error) in
if let error = error {
print("Error Uploading: \(error.localizedDescription)")
return
}
//creating the URL
self.fileURL = metaData!.downloadURLs![0].absoluteString
if let user = FIRAuth.auth()?.currentUser {
let idRoom = self.BASE_REF.child("rooms").childByAutoId()
idRoom.setValue(["title": title, "author": author, "date": date, "story": story, "ThumbnailURLFromStorage": self.storageRef.child(metaData!.path!).description, "fileURL": self.fileURL])
}
}
}
func fetchData(_ callback: @escaping (Room) ->()) {
Data.dataService.ROOM_REF.observe(.childAdded, with: { (snapshot) in
let room = Room(key: snapshot.key, snapshot: snapshot.value as! Dictionary<String, AnyObject>)
callback(room)
})
}
}
嘗試在初始化後打印'self.fileURL'的值。 –
你可以顯示什麼'self.storageRef.child(metaData!.path!)說明,''self.fileURL'打印出來。 – Dravidian