2014-10-31 4 views
1

Swift에서 작업 중입니다. tableview의 didSelectRowAtIndexPath 메소드에서 오류가 발생했습니다. 다른보기 컨트롤러, 즉 'secondViewController'에 값을 전달하고 싶습니다. 여기 EmployeesId는 배열입니다.Swift에서 하나의보기 컨트롤러에서 다른보기 컨트롤러로 값 전달

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
    var view: Dashboard = self.storyboard?.instantiateViewControllerWithIdentifier("Dashboard") as Dashboard 

    self.navigationController?.pushViewController(view, animated: true) 
    secondViewController.UserId = employeesId[indexPath.item] //getting an error here. 
} 

을하지만이 오류가 점점 오전 : 치명적인 오류 : 예기치 않게하는 옵션 값을 풀기 동안 nil을 찾아 다음과 같이 관련 코드입니다.

도움이 될 것입니다.

+0

사용자 아이디가 어떤 유형과 같은 가치인가? UILabel이면보기가 렌더링 될 때까지 아무 것도 표시되지 않습니다. 또한, secondViewController는 어디에 설정 되었습니까? –

+0

indexPath.item이 아닌 indexPath.row 여야합니다. 문제가 해결 될지 모르겠습니다. employeesId [indexPath.item]이 0이 아닌 것은 확실합니까? – rdelmar

+0

은 seconfViewController에서 UserId (강하고 비 구조)입니까? – casillas

답변

4

다음은 두 가지 가정을 가진 일반적인 해결책입니다. 첫째, UserId는 UILabel이 아닙니다. 둘째, 당신은 여기에 대시 보드 보이는 무엇을 대신 secondViewController

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
    var view: Dashboard = self.storyboard?.instantiateViewControllerWithIdentifier("Dashboard") as Dashboard 

    self.navigationController?.pushViewController(view, animated: true) 
    view.UserId = employeesId[indexPath.row] 
} 

를 사용하는 두 번째 줄에서 인스턴스화 view를 사용하는 의미와 같은 :

class Dashboard: UIViewController { 
    var UserId: String! 
    @IBOutlet var userIDLabel: UILabel! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     // Do any additional setup after loading the view. 
     userIDLabel.text = UserId 
    } 

    ... 
} 
+0

viewDidLoad()에서 "userid"를 사용하여 웹 서비스를 호출하려는 경우 사용자 ID가 nil을 반환하기 때문에 호출 할 방법 –

0

은 두 번째 ViewController에서 UserId(strong, nonatomic)입니까?

약한 경우 즉시 쓰레기를 보냈습니다. 당신은 그것을 강하게 만들어야합니다.

1

우리는 신속 3 "구조체"을 사용하여 값을 전달할 수 있습니다

  1. 가있는 클래스를 만들기 프로젝트에 신속한 파일을 만듭니다 신속한 파일이 울부 짖는 소리

    class StructOperation { 
         struct glovalVariable { 
         static var userName = String(); 
        } 
    } 
    
  2. 대상 뷰 컨트롤러에서 값을 "정적 var에 userName에"첫 번째 뷰 컨트롤러에서 "StructOperation"클래스 "구조체 glovalVariable"의 변수와 같은

    @IBAction func btnSend(_ sender: Any) { 
        StructOperation.glovalVariable.userName = "Enamul Haque"; 
        //Code Move to Sencon View Controller 
    } 
    
  3. 을 Assing처럼 만들 수 울부 짖는 소리

    var username = StructOperation.glovalVariable.userName; 
    
+0

다른 방법으로 전역 값을 전달하거나 다른 방법으로 전달하는 것이 더 낫습니까? @Enamul Haque –

+0

thanks @Dhaval Bhadania –

관련 문제