2017-01-09 29 views
0

私はできることすべてを試していますが、何も動作していないようです。あるビューコントローラから別のビューコントローラにfirebaseユーザ情報を渡そうとしていますが、決して表示されません。ビューコントローラーにデータが表示されない

テーブルビューから開始します テーブルビューには、firebaseデータベースから引き出されているユーザーが表示されます。ユーザは、次のコードが実行されますセル選択した場合: を私が「userProfileNavigator」で

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) 
} 

を選択されたセルのデータを転送する方法として、機能「showProfileControllerForUser」を参照している場合に使用された関数前にです。この関数は収集された情報を渡し、最終的な宛先に渡します。

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() 

} 

しかし、それでも "nil 「あなたはその渡された値で、コントローラを開きたい場合は

答えて

3

をインスタンス化した後、その値を設定することができ、その後、次の2つのViewControllersを持っています。 1つはUITableViewを含み、もう1つはShowProfileControllerForUserです。

UITableViewを含ま ViewController

、コードこの:あなたは右のViewControllerを提示している場合

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) 
    } 

はまた、私はわかりません。あなたのShowProfileControllerForUser.swift

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

あなたviewDidLoad()

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

編集:

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

No luck:/あなたが提案したように、テーブルビューとビューコントローラを設定しました(上記参照) – 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

でしょうまだで "mainProfile" ビューコントローラにそれを作りますそんなことをやっている? – Otheprogrammer

+0

試してみてください。ここでmainProfileを設定していますか? –

関連する問題