2017-01-09 3 views
0

Я стараюсь все, что мог, но ничего не работает. Я пытаюсь передать информацию пользователя firebase с одного контроллера представления на другой, но он никогда не появляется.Данные не отображаются в поле зрения контроллера

Он начинается с вида таблицы Вид таблицы заполнен пользователями, которые вытаскиваются из базы данных firebase. Когда пользователь выбирает ячейку следующий код запускается на выполнение: я ссылаться на функцию «showProfileControllerForUser» как способ транспортировки данных ячейки, который был выбран

var mainProfile: userProfileNavigator? 
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
    let user1 = self.users[indexPath.row] 
self.mainProfile?.showProfileControllerForUser(user3: user1) 

    let storyboard: UIStoryboard = UIStoryboard(name: "Main", bundle:nil) 
    let vc: UINavigationController = storyboard.instantiateViewController(withIdentifier: "mainNavProfile") as! UINavigationController 
    self.present(vc, animated: true, completion: nil) 
} 

В «userProfileNavigator», где функция, которая была использована до есть. Функция передает собранную информацию и передает ее в конечный пункт назначения.

func showProfileControllerForUser(user3: User){ 
    mainProfile?.user2 = user3 
} 

Наконец, «mainProfile» - это то место, куда я хочу передать данные.

var user2: User?{ 
    didSet{ 
     navigationItem.title = user2?.name 
    } 

я мог себе представить, что является очень запутанным, я могу предоставить больше информации или ясности при необходимости

попытался таблицы настройки как таковой:

var mainProfile: mainProfile? 
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
    let user1 = self.users[indexPath.row] 
    let storyboard: UIStoryboard = UIStoryboard(name: "Main", bundle:nil) 
    let vc: UIViewController = storyboard.instantiateViewController(withIdentifier: "mainProfile") 
    self.mainProfile?.user2 = user1 
    self.present(vc, animated: true, completion: nil) 
} 

И в ViewController, в котором информация является как таковой:

import UIKit 
import Firebase 

class mainProfile: UIViewController{ 
@IBOutlet weak var testLabel: UILabel! 
     override func viewDidLoad() { 
    super.viewDidLoad() 
    print("lets see if this is the new user", user2.name as Any) 


} 
var user2 = User() 

} 

но он все еще появляется как «ноль» "

ответ

3

Если я верно понял ваш вопрос, то у вас есть два ViewControllers. Один из них содержит UITableView, а другой - ShowProfileControllerForUser.

В ViewController, которые содержат UITableView, код этот:

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
     let user1 = self.users[indexPath.row]  
     let storyboard: UIStoryboard = UIStoryboard(name: "Main", bundle:nil) 
     let vc: UINavigationController = storyboard.instantiateViewController(withIdentifier: "mainNavProfile") as! UINavigationController 
     vc.user3 = user1 
     self.present(vc, animated: true, completion: nil) 
    } 

Кроме того, я не уверен, что, если Вы представляете право ViewController.

В вашем ShowProfileControllerForUser.swift,

var user3 = User // declare a variable with proper type. 

Теперь в вашем viewDidLoad():

override func viewDidLoad() { 
     super.viewDidLoad() 
     showProfileControllerForUser(user3) 
    } 

Edit:

var mainProfile: mainProfile? 
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
    let user1 = self.users[indexPath.row] 
    let storyboard: UIStoryboard = UIStoryboard(name: "Main", bundle:nil) 
    let vc: UIViewController = storyboard.instantiateViewController(withIdentifier: "mainProfile") 
    //self.mainProfile?.user2 = user1 // Instead of this line 
    vc.user2 = user1 // use this line 
    self.present(vc, animated: true, completion: nil) 
} 
+0

Не повезло:/Я установил его в виде таблицы и вида, как вы предложили (см. Выше) – Otheprogrammer

+0

Я обновил свой ответ. Дайте мне знать, если это сработает. –

1

Если вы хотите, чтобы открыть контроллер с этим переданным значением, вы можете установить это значение после того, как его инстанцировании

let storyboard: UIStoryboard = UIStoryboard(name: "Main", bundle:nil) 
let vc: UINavigationController = storyboard.instantiateViewController(withIdentifier: "mainNavProfile") as! UINavigationController 

// this is what your showProfileControllerForUser doing 
vc.user2 = user1 

self.present(vc, animated: true, completion: nil) 
+0

Would, что до сих пор делают его на контроллер вида "mainProfile" по это так? – Otheprogrammer

+0

Попробуйте, где вы устанавливаете mainProfile? –