通知中心可以用于将数据发送到多个视图控制器吗?

时间:2019-02-18 19:26:11

标签: ios swift notificationcenter

我有一个连接到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
                    }
                }
            }
        }
    }

0 个答案:

没有答案