我有一个连接到sqlite数据库的登录过程,我希望将用户的currentid发送到我的所有视图控制器,以便在进行查询时可以使用合适的用户。我试图使用通知中心,但它只能在一个视图控制器上使用,而不能在其他任何视图控制器上使用。另外,当您离开该视图控制器并返回时,它似乎消失了,不确定为什么吗?我错过了什么吗?还是应该以其他方式发送数据?
我注释掉的部分导致程序循环,所以我暂时
//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
}
}
}
}
}