У меня есть процесс входа в систему, который подключен к базе данных sqlite, я хочу, чтобы текущая информация о пользователе была отправлена на все мои контроллеры представления, поэтому при выполнении запросов я могу использовать нужного пользователя.Я пытался использовать центр уведомлений, и он работает для одного контроллера представления, но не для других.Кроме того, когда вы выходите из этого контроллера представления и возвращаетесь, он, кажется, исчезает, и я не уверен, почему?Я что-то пропустил или мне нужно отправлять данные другим способом?
Части, которые я прокомментировал, заставили программу зацикливаться, поэтому я временно
//code that's sending notification on first view controller
let object: [String: Any] = ["UserID": UserID]
performSegue(withIdentifier: "ToHome", sender: self)
NotificationCenter.default.post(name: ID_TRANSFER, object: object)
//code that's receiving on other view controller
@IBOutlet weak var LabelUsername: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
createObservers()
}
//deinit {
// NotificationCenter.default.removeObserver(self)
//}
func createObservers(){
NotificationCenter.default.addObserver(forName: ID_TRANSFER, object: nil, queue: nil){
notification in
if let object = notification.object as? [String: Any]{
if let currentid = object["UserID"] as? Int {
print(currentid, "read in VC4")
let fileUrl = try! FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false)
.appendingPathComponent("RateappDatabase4.sqlite")
if sqlite3_open(fileUrl.path, &db) != SQLITE_OK {
print("error opening database")
return
} else {
print("database open VC4")
}
var statement: OpaquePointer?
if sqlite3_prepare(db, "select UserID, Username from UserDetails", -1, &statement, nil) != SQLITE_OK {
let errmsg = String(cString: sqlite3_errmsg(db)!)
print("error preparing select: \(errmsg)")
}
while sqlite3_step(statement) == SQLITE_ROW {
let UserID = sqlite3_column_int(statement, 0)
print("UserID = \(UserID); ", terminator: "")
if let cString = sqlite3_column_text(statement, 1) {
let Username = String(cString: cString)
if (UserID == currentid){
print(UserID, Username)
self.LabelUsername.text = Username
sqlite3_reset(statement)
if sqlite3_finalize(statement) != SQLITE_OK {
let errmsg = String(cString: sqlite3_errmsg(db)!)
print("error finalizing prepared statement: \(errmsg)")
}
statement = nil
if sqlite3_close(db) != SQLITE_OK {
print("error closing database")
}else{
print("database close VC4")
// let object: [String: Any] = ["UserID": UserID]
//NotificationCenter.default.post(name: ID_TRANSFER, object: object)
}
db = nil
}
}
}
}
}