Можно ли использовать центр уведомлений для отправки данных на несколько контроллеров представления? - PullRequest
0 голосов
/ 18 февраля 2019

У меня есть процесс входа в систему, который подключен к базе данных 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
                    }
                }
            }
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...