Post not yet marked as solved
I am trying to implement a logout button in my application using swift. Users are authenticated through firebase. This is the function that I am currently working on:
@IBAction func buttonLogOut(_ sender: Any) {
do
{
try Auth.auth().signOut()
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let loginVC = storyboard.instantiateViewController(withIdentifier: "login View Controller") as! loginVC
let appDelegate = UIApplication.shared.delegate as! AppDelegate
appDelegate.window?.rootViewController = loginVC
self.performSegue(withIdentifier: "Dashboard", sender: self)
}
catch let error as NSError
{
print(error.localizedDescription)
}
}
}
I am getting these errors on the following lines and Im unsure how to solve this
let loginVC = storyboard.instantiateViewController(withIdentifier: "loginViewController") as! Main
Cannot find type 'Main' in scope
And
appDelegate.window?.rootViewController = loginVC
Value of type 'AppDelegate' has no member 'window'
Post not yet marked as solved
I am currently trying to develop an application that fetches users data from a firebase database and displays it in a table view. The function that I am having problems with is the function that loads the data.
class EntryViewController: NSObject {
var event :String?
var dateAndTime: String?
var message: String?
// id which is set from firebase to uniquely identify it
var uniqueId:String?
}
class LoggingViewController: UIViewController {
var entryviewcontroller:EntryViewController?
@IBOutlet weak var eventTextBox: UITextField!
@IBOutlet weak var datePicker: UIDatePicker!
@IBOutlet weak var notesTextBox: UITextField!
@IBAction func saveEntryButton(_ sender: Any) {
if entryviewcontroller == nil {
entryviewcontroller = EntryViewController()
}
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "dd/MM/yyyy hh:mm a"
entryviewcontroller?.event = self.eventTextBox.text ;
entryviewcontroller?.message = self.notesTextBox.text
entryviewcontroller?.dateAndTime = dateFormatter.string(from: self.datePicker.date)
let db = Firestore.firestore()
guard let uid = Auth.auth().currentUser?.uid else {
return
}
db.collection("usersEvents").document(uid).setData([
"event" : entryviewcontroller!.event! ,
"dateAndTime" : entryviewcontroller!.dateAndTime!,
"message" : entryviewcontroller!.message!]){
err in
if let err = err {
print("Error writing document: \(err)")
return
} else {
print("Document successfully written!")
}
}
func viewDidLoad() {
super.viewDidLoad()
}
}
}
class DashboardViewController: UIViewController {
@IBOutlet weak var reminderList: UITableView!
var reminders = [EntryViewController]()
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
loadData()
}
func loadData() {
self.reminders.removeAll()
let ref = Database.database().reference()
ref.child("usersEvents").observeSingleEvent(of: .value, with: { (snapshot) in
if let reminderDict = snapshot.value as? [String:AnyObject] {
for (_,reminderElement) in reminderDict {
print(reminderElement);
let reminder = Reminder()
reminders.event = reminderElement["event"] as? String
reminders.dateAndTime = reminderElement["data and time"] as? String
reminders.message = reminderElement["notes"] as? String
self.reminders.append(reminder)
}
}
self.tableView.reloadData() // Should it be inside the if let ?
}, withCancel: { (error) in
print(error.localizedDescription)
})
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return self.reminders.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
if let cell = tableView.dequeueReusableCell(withIdentifier: "ToDoCell") {
var content = cell.defaultContentConfiguration()
content.text = reminders[indexPath.row].event
cell.contentConfiguration = content
return cell
} else {
return UITableViewCell()
}
}
}
}
This is the class thats being developed for the dashboard page of the application. The following error messages are displayed
Value of type '[EntryViewController]' has no member 'event'
Value of type '[EntryViewController]' has no member 'dateAndTime'
Value of type '[EntryViewController]' has no member 'message'
This is where the errors keep appearing
let reminder = Reminder()
reminders.event = reminderElement["event"] as? String
reminders.dateAndTime = reminderElement["data and time"] as? String
reminders.message = reminderElement["notes"] as? String
self.reminders.append(reminder)
}
I am creating an application where users can set reminders for things. The application is connected to a firebase database where all of the data is stored. When the user saves the the event that they are setting this new even should appear on the home page in a table view. I keep getting the error:
"Extra trailing closure passed in call"
I have been unable to find a solution that fixes the function so I am able to view the data. Here is my code below
import FirebaseAuth
import Firebase
import FirebaseDatabase
import FirebaseFirestore
class DashboardViewController: UIViewController {
@IBOutlet weak var reminderList: UITableView!
var reminders = [EntryViewController]()
func viewWillAppear(animated: Bool) {
viewWillAppear(animated: animated)
loadData()
}
func loadData() {
self.reminders.removeAll()
let ref = Database.database().reference()
ref.child("usersEvents").observeSingleEvent(of: .value, withBlock: { (snapshot) in
if let reminderDict = snapshot.value as? [String:AnyObject] {
for (_,reminderElement) in reminderDict {
print(reminderElement);
let reminder = Reminder()
reminders.event = reminderElement["event"] as? String
reminders.dateAndTime = reminderElement["data and time"] as? String
reminders.message = reminderElement["notes"] as? String
self.reminders.append(reminder)
}
}
self.tableView.reloadData()
}) { (error) in
print(error.localizedDescription)
}
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return self.reminders.count
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "ToDoCell")
cell!.textLabel?.text = reminders[indexPath.row].event
return cell!
}
}
I am getting the error on this line
}) { (error) in