2016-12-29 9 views
0

UITableViewControllerはFirebaseのすべてのユーザーをリストに表示しています。 1人のユーザをタップすると、別のUITableViewControllerが表示され、Interface Builderで静的なTableViewレイアウトを準備してユーザプロパティを編集します。選択したユーザーのUIDをDetailTableViewControllerに渡して、そこに現在のユーザーデータをすべてロードします。Swift 3:TableViewControllerから別のTableViewControllerに文字列を渡します。

編集:この質問は正確な複製ではありません。 UITableViewControllerから別のものにデータを渡したいUITableViewControllerノーマル詳細UIViewController

これは最初のTableViewControllerの現在のコードです。

誰かが私を助けることができますか?理解できません。

UserListTableViewController.swift:UserListTableViewController.swiftで

import UIKit 
import Firebase 
import FirebaseAuth 
import FirebaseDatabase 

class UserListTableViewController: UITableViewController { 

    var dbRef:FIRDatabaseReference! 
    var user = [User]() 

    var writeSelectedUID:String! 
    var selectedUID: String = "Mister X" 

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

    override func viewDidAppear(_ animated: Bool) { 
     super.viewDidAppear(animated) 
     self.startObservingDB() 
    } 

    func startObservingDB() { 
     dbRef.observe(.value, with: { (snapshot:FIRDataSnapshot) in 
      var newUser = [User]() 

      for user in snapshot.children { 
       let userObject = User(snapshot: user as! FIRDataSnapshot) 
       newUser.append(userObject) 
      } 
      self.user = newUser 
      self.tableView.reloadData() 
     }) { (error:Error) in 
      print(error.localizedDescription) 
     } 
    } 

    // MARK: - Table view data source 
    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     return user.count 
    } 

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
     let cell = tableView.dequeueReusableCell(withIdentifier: "User Cell", for: indexPath) as! CustomUserListTableViewCell 

     // Configure the cell 
     let userRow = user[indexPath.row] 
     cell.userFirstLastNameLabel?.text = "\(userRow.firstName!) \(userRow.lastName!)" 
     cell.userUsernameLabel?.text = "@\(userRow.username!)" 
     } 
     return cell 
    } 

    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
     //let selectedUID = user[indexPath.row] 
     let selectedUserRow = user[indexPath.row] 
     self.writeSelectedUID = "\(selectedUserRow)" 
     performSegue(withIdentifier: "editUser", sender: self) 
    } 

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
     // Get the new view controller using segue.destinationViewController. 
     let viewcontroller = segue.destination as! ManageUserSettingsTableViewController 
     // Pass the selected object to the new view controller. 

     if(segue.identifier == "editUser") { 
      viewcontroller.usernameTextField.text! = "\(self.writeSelectedUID)" 
      print("Var: \(self.writeSelectedUID)") 
     } 
    } 
} 

答えて

0

:あなたのAnotherViewControllerで

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    // Get the new view controller using segue.destinationViewController. 
    let viewcontroller = segue.destination as! ManageUserSettingsTableViewController 
    // Pass the selected object to the new view controller. 

    //let object = self.writeSelectedUID as? String 
    // let object = self.writeSelectedUID as! String! 

    if(segue.identifier == "editUser") { 
      if let object = self.writeSelectedUID { 
        viewcontroller.detailItem = object as AnyObject? 
      } 
    } 
} 

:「致命的なエラー:

var detailItem: AnyObject? 

usernameTextField.text = detailItem?.description 
+0

あなたのバージョンでは、私が持っていた同じエラーを与えました:アンラッピング中に予期せぬことにnilが見つかりました。 'オプションを追加しました。 –

関連する問題