2016-12-15 1 views
0

두 개의 viewcontroller가 있습니다. 두 번째 vc에서 첫 번째 vc로 값을 전달해야합니다. 즉, nameText 문자열을 내 firstvc에있는 nameArray 배열에 추가해야합니다. 이것은 내가 내 secondvc에서 뭘하는지입니다 : 신속하게 viewcontroller 사이에 값을 전달할 수 없습니다.

let homeViewController: HomeViewController = storyboard?.instantiateViewController 
(withIdentifier: "homeViewControllerIdentifier") as! HomeViewController 
homeViewController.nameArray.append(nameText) 

나는 위의 마지막 문 ^에 중단 점을 넣어 내가 값을 가져 po homeViewController.nameArray.first을한다. 그러나 컨트롤이 첫 번째 VC로 돌아갈 때 동일한 작업을 수행 할 때 배열을 사용하려고 시도하면 nil이라고 표시됩니다. 나는이 줄에서 homeViewController.nameArray.append(nameText)을 생각했다. 배열 내부에 값을 추가하고 있는가? 이게 뭐가 잘못 되었 니? 미리 감사드립니다.

+1

첫 번째보기 컨트롤러를 다시 인스턴스화합니다. – paulvs

+0

다른 방법이 있습니까? @paulvs –

답변

1

이전 viewcontroller를 인스턴스화하고이 인스턴스를 새로 작성하기 때문에 코드가 작동하지 않는 이유입니다.

여기에서 대리인/프로토콜을 만들어야합니다. 예 :

protocol ViewDelegate{ 
     func updateArray() 
    } 

    class Class1: UIViewController{ 

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
     let vc = segue.destinationController as! Class2 
     vc.delegate = self 
    } 
    }  
    extension Class1: ViewDelegate { 

    func updateArray(){ 
    // update array here 
     } 
    } 

    class Class2: UIViewController{ 
    var delegate: ViewDelegate! 

    func updatearrayhere(){ 
     delegate.updateArray() 
     }  

    } 
관련 문제