将 Firebase 加载到 Tableview
Loading Firebase into Tableview
我正在尝试将数据从 Firebase 加载到我的 TableView 和 FSCalendar 中。我不确定我做错了什么。我认为我的问题可能来自我的重新加载,但我之前已经像这样构建它们并且没有遇到问题。因此,如果有人可以阅读并了解发生了什么。
我的问题是:来自 Firebase 的数据没有填充我的表格视图中的单元格,我的事件的点没有显示,日历是 FScalendar。我在文档中发现此功能将使它们出现,但我没有看到它们。感谢您的帮助。
我的 Firebase 数据模型:
{
"calendarevents" : {
"2021-01-12" : {
"eventColor" : "red",
"eventDate" : "2021-01-12",
"eventName" : "Enrollment"
},
"2021-01-15" : {
"eventColor" : "red",
"eventDate" : "2021-01-15",
"eventName" : "First Day"
}
}
}
我的事件处理程序:
func retrieveEventsFromDatabase() {
dbReference = Database.database().reference().child("calendarevents")
dbReference.observe(DataEventType.value, with: { [weak self] (snapshot) in
guard snapshot.childrenCount > 0 else { return }
var events: [EventsDataModel] = []
for event in snapshot.children.allObjects as! [DataSnapshot]
{
let object = event.value as? [String: AnyObject]
let eventName = object?["eventName"]
let eventDate = object?["eventDate"]
let eventColor = object?["eventColor"]
let event = EventsDataModel(eventName: eventName as! String, eventDate: eventDate as! String,eventColor: eventColor as! String)
events.append(event)
}
DispatchQueue.main.async {
self?.eventsTable.reloadData()
self?.calendar.reloadData()
}
})
}
我的 Tableview 和 FScalendar 函数:
func calendar(_ calendar: FSCalendar, appearance: FSCalendarAppearance, eventDefaultColorsFor date: Date) -> [UIColor]? {
let dateString = self.dateFormatter2.string(from: date)
for data in eventsArray {
if data.eventDate.contains(dateString) {
if data.eventColor == "red" {
return [UIColor.red]
}
return [UIColor.black]
}
}
return nil
}
func calendar(_ calendar: FSCalendar, numberOfEventsFor date: Date) -> Int {
let dateString = self.dateFormatter2.string(from: date)
for data in eventsArray {
if data.eventDate.contains(dateString) {
return 1
}
}
return 0
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
print(eventsArray.count)
return eventsArray.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let friend = eventsArray[indexPath.row].eventName
let cell = eventsTable.dequeueReusableCell(withIdentifier: "eventCell", for: indexPath) as! EventsTitleTableViewCell
cell.eventTitleLabel?.text = friend
return cell
}
}
视图已加载:
override func viewDidLoad() {
super.viewDidLoad()
calendar.dataSource = self
calendar.delegate = self
retrieveEventsFromDatabase()
}
您似乎忘记填充 self.eventsArray。
在重新加载 tableView 之前,执行
self.eventsArray = events
我正在尝试将数据从 Firebase 加载到我的 TableView 和 FSCalendar 中。我不确定我做错了什么。我认为我的问题可能来自我的重新加载,但我之前已经像这样构建它们并且没有遇到问题。因此,如果有人可以阅读并了解发生了什么。
我的问题是:来自 Firebase 的数据没有填充我的表格视图中的单元格,我的事件的点没有显示,日历是 FScalendar。我在文档中发现此功能将使它们出现,但我没有看到它们。感谢您的帮助。
我的 Firebase 数据模型:
{
"calendarevents" : {
"2021-01-12" : {
"eventColor" : "red",
"eventDate" : "2021-01-12",
"eventName" : "Enrollment"
},
"2021-01-15" : {
"eventColor" : "red",
"eventDate" : "2021-01-15",
"eventName" : "First Day"
}
}
}
我的事件处理程序:
func retrieveEventsFromDatabase() {
dbReference = Database.database().reference().child("calendarevents")
dbReference.observe(DataEventType.value, with: { [weak self] (snapshot) in
guard snapshot.childrenCount > 0 else { return }
var events: [EventsDataModel] = []
for event in snapshot.children.allObjects as! [DataSnapshot]
{
let object = event.value as? [String: AnyObject]
let eventName = object?["eventName"]
let eventDate = object?["eventDate"]
let eventColor = object?["eventColor"]
let event = EventsDataModel(eventName: eventName as! String, eventDate: eventDate as! String,eventColor: eventColor as! String)
events.append(event)
}
DispatchQueue.main.async {
self?.eventsTable.reloadData()
self?.calendar.reloadData()
}
})
}
我的 Tableview 和 FScalendar 函数:
func calendar(_ calendar: FSCalendar, appearance: FSCalendarAppearance, eventDefaultColorsFor date: Date) -> [UIColor]? {
let dateString = self.dateFormatter2.string(from: date)
for data in eventsArray {
if data.eventDate.contains(dateString) {
if data.eventColor == "red" {
return [UIColor.red]
}
return [UIColor.black]
}
}
return nil
}
func calendar(_ calendar: FSCalendar, numberOfEventsFor date: Date) -> Int {
let dateString = self.dateFormatter2.string(from: date)
for data in eventsArray {
if data.eventDate.contains(dateString) {
return 1
}
}
return 0
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
print(eventsArray.count)
return eventsArray.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let friend = eventsArray[indexPath.row].eventName
let cell = eventsTable.dequeueReusableCell(withIdentifier: "eventCell", for: indexPath) as! EventsTitleTableViewCell
cell.eventTitleLabel?.text = friend
return cell
}
}
视图已加载:
override func viewDidLoad() {
super.viewDidLoad()
calendar.dataSource = self
calendar.delegate = self
retrieveEventsFromDatabase()
}
您似乎忘记填充 self.eventsArray。
在重新加载 tableView 之前,执行
self.eventsArray = events