【发布时间】:2020-11-27 02:04:33
【问题描述】:
我几乎解决了过去几周遇到的一个大问题。长话短说,我正在尝试将数组数据发送到我的 Firebase 数据库。当我按下发送时,我将显示发送按钮当前正在发送的内容:
我希望零成为每个用户的 ID(每行一个节点)。用户的数量和他们是谁由一个表确定,子值是数组中的值。
这是发送到 firebase 的函数的代码:
@IBAction func sendButtonTapped(_ sender: Any) {
let companyNameC = companyNameTextFieldConsiderations.text!.trimmingCharacters(in: .whitespacesAndNewlines)
let companyDescriptionC = companyDescriptionTextFieldConsiderations.text!.trimmingCharacters(in: .whitespacesAndNewlines)
let today = Date()
let formatter1 = DateFormatter()
formatter1.dateFormat = "MMM d y"
print(formatter1.string(from: today))
let todaysDate = formatter1.string(from: today)
let storageRef = Storage.storage().reference(forURL: "MY STORAGE URL HERE")
let imageName = companyNameTextFieldConsiderations.text!
let storageCompanyRef = storageRef.child("Company_Image_Considerations").child("\(todaysDate)").child(imageName)
let companyDescriptionTextFieldText = companyDescriptionTextFieldConsiderations.text
let dateToStart = startDateTextFieldConsiderations.text
let dateToDecide = endDateTextFieldConsiderations.text
let companyRef = Database.database().reference().child("Considerations").child("\(todaysDate)").child(imageName)
let numberOfPeopleCells = ConsiderationsTestViewController.people
let considerationInfluencerRef = Database.database().reference().child("Considerations").child("\(todaysDate)").child(imageName).child("Users").child("\(numberOfPeopleCells.startIndex)")
let values = ["Feed_Quantity": "feedTFC", "Story_Quantity": "storyTFC", "Compensation": "compensationTFC"]
guard let imageSelected = self.CompanyImage.image else {
print ("Avatar is nil")
return
}
var dict: Dictionary<String, Any> = [
"Company Image": "",
"Company Description": companyDescriptionTextFieldText!,
"Start Date": dateToStart!,
"Decision Date": dateToDecide! ]
guard let imageData = imageSelected.jpegData(compressionQuality: 0.5) else {
return
}
let metadata = StorageMetadata()
metadata.contentType = "image/jpeg"
storageCompanyRef.putData(imageData, metadata: metadata, completion:
{ (StorageMetadata, error) in
if (error != nil) {
return
}
storageCompanyRef.downloadURL { (url, error) in
if let metadateImage = url?.absoluteString {
dict["Company Image"] = metadateImage
companyRef.updateChildValues(dict, withCompletionBlock: {
(error, ref) in
if error == nil {
print("Done")
return
}
}
)
}
}
storageRef.updateMetadata(metadata) { metadata, error in
if error != nil {
//Uh-oh, an error occurred!
} else {
// Updated metadata for 'images/forest.jpg' is returned
}
}
})
considerationInfluencerRef.updateChildValues(values as [AnyHashable : Any]) { (error, ref) in
if error != nil {
print(error ?? "")
return
}
self.navigationController?.popViewController(animated: true)
}
}
我似乎无法引用 atIndexPath.row。然后我会使用每个单元格中的 UID 创建一个节点,然后让每个 indePath.row 数据附加子值。
最好的做法是什么?
编辑:这是人的结构:
import UIKit
struct Person {
var Name: String?
var PostNumber: String?
var StoryNumber: String?
var Compensation: String?
var ProfileImageUrl: String?
var userID: String?
}
这是表格代码:
extension ConsiderationsTestViewController: UITableViewDelegate, UITableViewDataSource {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return ConsiderationsTestViewController.people.count
}
func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return 72
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: AddPersonCell, for: indexPath) as! ConsiderationsCell
let numberOfPeopleCells = ConsiderationsTestViewController.people[indexPath.row]
cell.nameLabelC.text = numberOfPeopleCells.Name
cell.feedLabelC.text = numberOfPeopleCells.PostNumber
cell.storyLabelC.text = numberOfPeopleCells.StoryNumber
cell.compensationLabelC.text = numberOfPeopleCells.Compensation
cell.userImage.loadImageUsingCacheWithUrlString(urlString: numberOfPeopleCells.ProfileImageUrl!)
cell.userImage.layer.cornerRadius = 25
cell.nameLabelC.numberOfLines = 0
return cell
}
func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool {
return true
}
func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) {
if (editingStyle == .delete) {
ConsiderationsTestViewController.people.remove(at: indexPath.row)
// handle delete (by removing the data from your array and updating the tableview)
tableView.deleteRows(at: [indexPath], with: .fade)
}
}
}
编辑:
下面是有 3 个用户时的数组示例:
3 elements
▿ 0 : Person
▿ Name : Optional<String>
- some : "Person's Name1"
▿ PostNumber : Optional<String>
- some : "1"
▿ StoryNumber : Optional<String>
- some : "1"
▿ Compensation : Optional<String>
- some : "1"
▿ ProfileImageUrl : Optional<String>
- some : "PROFILEIMAGE URL HERE"
▿ userID : Optional<String>
- some : "B2Z4DlZ8RucvEQhz2NSUkquqc5P2"
▿ 1 : Person
▿ Name : Optional<String>
- some : "Person's Name2"
▿ PostNumber : Optional<String>
- some : "1"
▿ StoryNumber : Optional<String>
- some : "11"
▿ Compensation : Optional<String>
- some : "1"
▿ ProfileImageUrl : Optional<String>
- some : "PROFILEIMAGE URL HERE"
▿ userID : Optional<String>
- some : "Lbn9HL1WIpZTMFzpGWAXy7Ra0EA2"
▿ 2 : Person
▿ Name : Optional<String>
- some : "Person's Name3"
▿ PostNumber : Optional<String>
- some : "1"
▿ StoryNumber : Optional<String>
- some : "1"
▿ Compensation : Optional<String>
- some : "1"
▿ ProfileImageUrl : Optional<String>
- some : "PROFILEIMAGE URL HERE"
▿ userID : Optional<String>
- some : "NE6WVUfF6WQjJT9eeVSJgfvrrZW2"
【问题讨论】:
标签: arrays swift firebase firebase-realtime-database