2016-12-29 1 views
0

나는 Firebase의 모든 사용자를 목록에 표시하는 UITableViewController을 가지고 있습니다. 사용자 한 명을 탭하면 Interface Builder에서 준비된 정적 TableView 레이아웃이있는 다른 UITableViewController이 표시되어 사용자 속성을 편집 할 수 있습니다. 선택한 사용자의 UID를 DetailTableViewController에 전달하여 현재 사용자 데이터를 모두로드하려고합니다.스위프트 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을 발견했습니다. '해결 방법을 추가했습니다. –

관련 문제