Reputation: 178
I have been getting this error Use of unresolved identofier 'rightBarButtonDidClick'
.
I have already declared the class of rightBarButtonDidClick
,
But why its showing the error?
As per previous post on same topics, I tried every possible solutions
Like checking target membership and all. Its all okay .
Here is the Full code
import UIKit
import RealmSwift
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
@objc func rightBarButtonDidClick() {
let alertController = UIAlertController(title: "Logout", message: "", preferredStyle: .alert)
alertController.addAction(UIAlertAction(title: "Yes, Logout", style: .destructive, handler: {
alert -> Void in
SyncUser.current?.logOut()
self.navigationController?.setViewControllers([WelcomeViewController()], animated: true)
}))
alertController.addAction(UIAlertAction(title: "Cancel", style: .cancel, handler: nil))
self.present(alertController, animated: true, completion: nil)
}
}
class ItemsViewController: UIViewController {
let realm: Realm
let items: Results<Item>
override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) {
let syncConfig = SyncConfiguration(user: SyncUser.current!, realmURL: Constants.REALM_URL)
self.realm = try! Realm(configuration: Realm.Configuration(syncConfiguration: syncConfig, objectTypes:[Item.self]))
self.items = realm.objects(Item.self).sorted(byKeyPath: "timestamp", ascending: false)
super.init(nibName: nil, bundle: nil)
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func viewDidLoad() {
super.viewDidLoad()
navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Logout", style: .plain, target: self, action: #selector(rightBarButtonDidClick))
}
// Do any additional setup after loading the view.
}
I am using Swift
4.2
Xcode
10.0
Upvotes: 3
Views: 750
Reputation: 15258
You need to move this method rightBarButtonDidClick
into ItemsViewController
.
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
}
class ItemsViewController: UIViewController {
let realm: Realm
let items: Results<Item>
override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) {
let syncConfig = SyncConfiguration(user: SyncUser.current!, realmURL: Constants.REALM_URL)
self.realm = try! Realm(configuration: Realm.Configuration(syncConfiguration: syncConfig, objectTypes:[Item.self]))
self.items = realm.objects(Item.self).sorted(byKeyPath: "timestamp", ascending: false)
super.init(nibName: nil, bundle: nil)
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func viewDidLoad() {
super.viewDidLoad()
navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Logout", style: .plain, target: self, action: #selector(rightBarButtonDidClick))
}
@objc func rightBarButtonDidClick() {
let alertController = UIAlertController(title: "Logout", message: "", preferredStyle: .alert)
alertController.addAction(UIAlertAction(title: "Yes, Logout", style: .destructive, handler: {
alert -> Void in
SyncUser.current?.logOut()
self.navigationController?.setViewControllers([WelcomeViewController()], animated: true)
}))
alertController.addAction(UIAlertAction(title: "Cancel", style: .cancel, handler: nil))
self.present(alertController, animated: true, completion: nil)
}
}
Upvotes: 1