Строка, переданная через параметр отправителя, не может использоваться ViewController - PullRequest
0 голосов
/ 15 января 2020

Я передаю String (postID) между двумя контроллерами представления (соответственно DiscoverV C и DetailV C), используя параметр отправителя метода executeSegue . Когда представлен пункт назначения V C, я фактически вижу, что переданная мной строка правильно назначена локальной переменной «postID» (поскольку я могу ее распечатать). Но когда я пытаюсь выполнить над ним какие-либо операции, такие как запросы в базе данных Firebase, создается впечатление, что строка больше не присутствует. Я не знаю, как решить эту проблему, хотя это кажется глупым.

Это код метода viewDidLoad () получателя V C

var postID = “”
override func viewDidLoad() {
    print("this is the postID that I get from previous VC \(postID)")
    super.viewDidLoad()
    updateViewDetail()
}

This это метод updateViewDetail (), который выполняет некоторые операции с базой данных Firebase. Он пытается получить сообщение, используя строку PostID.

func updateViewDetail(){
    Api.Post.observePost(with: postID) { (post) in
        print("post id inside \(post.id)")
        guard let postUid = post.uid else{
            return
        }
        self.fetchUsers(uid: postUid) {
            self.post = post
            self.tableView.reloadData()
        }
    }
}

Когда я пытаюсь напечатать post.id внутри замыкания, он равен нулю. Вы знаете, как я могу решить эту проблему? Просто для завершения, это код метода наблюдений, который извлекает объект записи из базы данных FIR:

func observePost(with id : String, completion: @escaping (Post)-> Void) {              
    REF_Posts.child(id).observeSingleEvent(of: .value) { (snaphsot) in
        if let dict = snaphsot.value as? [String : Any]{
            let post = Post.transformPost(dict: dict, key: snaphsot.key)
            completion(post)
        }
    }
}

РЕДАКТИРОВАТЬ 1:

Это код prepare метод, установленный в предыдущем V C:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        let detailVC = segue.destination as! DetailViewController
        let postid = sender as! String
        detailVC.postID = postid
    }
...