将被发布的Json数据
对象:someObjectKey [ ArrayOfItems [ Item:someItemNumber Item:someItemNumber Item:someItemNumber ] TimeStamp:102047355 SomeOtherTimeStamp:null SomeInt:1111 someOtherInt:2222 SomeBoolean:false ] } 尝试的途径 - 转换a SwiftArray 到 NSArray - 将 NSMutableArray 转换为 NSArray代码
<$ c $ b返回\(NSDate()。timeIntervalSince1970 * 1000)} var someI nt = 1111 var someOtherInt = 2222 let myArrayOfStuff = convertItemsToNSArray() $ b $ post:[String:Any] = [timestamp:Timestamp, someInt:someInt,someOtherInt:someOtherInt,items:ItemList] //方法调用引用FIRDatabase.database.reference.child ... FirebaseDatabaseService.databaseReference.setValue(post)} private func convertItemsToNSArray() - > NSArray { var thisArray:NSMutableArray = [] 用于项目中的项目{ thisArray.add([name:Foo,key :bar,someCoolInt:1234])} 返回thisArray //这不起作用,因为它会以NSMutableArray的形式返回}干杯
解决方案我不记得究竟是什么原因,但也遇到了类似的问题,在android和Ios.workaround是保存数组通过将其转换为字典第一。比方说,我有经度和纬度的数组:
我首先创建一个类来包装lat和long。我有一个函数来获取包装所需数据的字典。
class HiddenLatlng { private var latitude:Double private var longitude:Double init(lat:Double,lng:Double){ self.latitude = lat self.longitude = lng } func toDictionery() - > [String:Double] { var dict = [String:Double]() dict [latitude] = self.latitude dict [longitude] = self.longitude在将数组保存到firebase之前,首先将该数组转换为使用上面的类的字典。
var dict = [ String:AnyObject]()//主字典保存到firebase var dictArray = [String:[String:Double]]()// temp字典 for(index,element)in hide.vertices.enumerate(){ dictArray [String(index)] = HiddenLatlng(lat:element.latitude,lng:element.longitude).toDictionery()} dict [ eventLatLngList] = dictArray //将临时词典添加到主词典中。`
现在我们可以保存($ key).updateChildValues(dict){(error()){/ * pre $ self $ :NSError?,引用:FIRDatabaseReference)在完成(错误)/ /如果一些错误处理它。 }
我希望它能节省您一些时间和麻烦:)
Question I need to post data into the firebase database, which (in terms of arrays) can only accept type NSArray. The application however, needs to add to the array
Json Data that wil be posted
Object: someObjectKey[ ArrayOfItems[ Item: someItemNumber Item: someItemNumber Item: someItemNumber ] TimeStamp: 102047355 SomeOtherTimeStamp: null SomeInt: 1111 someOtherInt: 2222 SomeBoolean: false ] }Goal How can I get the data above to be pushed up into the database?
Attempted Avenues -Convert a SwiftArray to a NSArray -Convert an NSMutableArray to a NSArray
Code
public func postToFireBase(){ var Timestamp: String { return "\(NSDate().timeIntervalSince1970 * 1000)" } var someInt = 1111 var someOtherInt = 2222 let myArrayOfStuff = convertItemsToNSArray() let post: [String : Any] = ["timestamp": Timestamp, "someInt": someInt, "someOtherInt": someOtherInt, "items": ItemList] //Method Call References the FIRDatabase.database.reference.child... FirebaseDatabaseService.databaseReference.setValue(post) } private func convertItemsToNSArray() -> NSArray{ var thisArray: NSMutableArray = [] for item in items{ thisArray.add(["name": "Foo", "key": "Bar", "someCoolInt": 1234]) } return thisArray //This won't work because it's coming back as NSMutableArray anyway }Cheers
解决方案I can't remember exactly whats the reason, but did faced similar problem too, in both android and Ios.workaround is that save the array by converting it to a dictionary first.
let's say I have array of longitude and latitude:
I first create a class for to wrap lat and long. I have a function to get the dictionary which wraps the required data.
class HiddenLatlng { private var latitude: Double private var longitude: Double init(lat: Double, lng: Double) { self.latitude = lat self.longitude = lng } func toDictionery() -> [ String : Double ] { var dict = [ String : Double ]() dict["latitude"] = self.latitude dict["longitude"] = self.longitude return dict }}
just before saving the array to firebase, first convert this array to dictionary using above class.
var dict = [String: AnyObject]() // main dictionary saved to firebase var dictArray = [ String : [String: Double] ]() // temp dictionary for (index, element) in hide.vertices.enumerate(){ dictArray[String(index)] = HiddenLatlng(lat: element.latitude, lng: element.longitude).toDictionery() } dict["eventLatLngList"] = dictArray // add temp dictionary to main dictionary.`
now we can save it to firebase.
self.reference.child("yourKey").child(key).updateChildValues(dict) { (error: NSError?, reference: FIRDatabaseReference) in completion(error) // if some error handle it. }I hope it saves you some time and trouble :)
更多推荐
将数组发布到Swift中的firebase数据库
发布评论