2017-01-20 2 views
0

컨트롤러 1에는 테이블이 있습니다. 셀의 선택에 따라, 인덱스 경로는 테이블 인 컨트롤러 2에 이어집니다. 그 세그먼트 인덱스 경로로, 나는이 indexpath에서 적절한 배열을 다운로드하는 CloudKit 함수를 가지고있다. 그래서 ...이전 컨트롤러를 방문하는 동안 nil (옵션 값을 언 래핑하는 동안)을 처리하는 방법

var newindex : IndexPath! 내가 "뒤로"이동 다른 인스턴스를 선택 할 때이 배열 인스턴스 중 하나를 selet 수 때

var restaurantArray: Array<CKRecord> = [] 

override func viewDidLoad() { 
    super.viewDidLoad() 




func downloadRestaurants() 
{ 

    let publicDB = CKContainer.default().publicCloudDatabase 

    let predicate = NSPredicate(value: true) 

    var query:CKQuery 

    switch newindex.row 
    { 
    case 0 : 
     query = CKQuery(recordType: "american", predicate: predicate) 
     self.typelabel.text = "American & European" 
    case 1 : 
     query = CKQuery(recordType: "asian", predicate: predicate) 
     self.typelabel.text = "Asian, Oriental, Indian & Mediterranean" 
    case 2 : 
     query = CKQuery(recordType: "pubs", predicate: predicate) 
     self.typelabel.text = "Burgers & Brew" 

    default : 
     query = CKQuery(recordType: "steakhouses", predicate: predicate) 
     self.typelabel.text = "Steakhouses" 
    } 
    publicDB.perform(query, inZoneWith: nil) 
    { 
     (results, error) -> Void in 

     if (error != nil) 
     { 
      print("Error" + (error?.localizedDescription)!) 
     } 
     else 
     { 
      for result in results! 
      { 
       self.restaurantArray.append(result) 
      } 
      OperationQueue.main.addOperation({() -> Void in 
       self.tableView.reloadData() 
      }) 
     } 
    } 
} 
downloadRestaurants() 
} 

그러나, 나는 컨트롤러 3에서 하나 개의 특정 인스턴스에 가져하고 이것은 문제가 아니라 내 프로그램이 충돌합니다. 어느 것이 이해할 수 있습니다. 현재, 내 논리는 컨트롤러 1에서 2에서 3으로 설정되지만, 내 indexpath/테이블 기능에 따라 3에서 2로 설정되지는 않습니다. 따라서이 작은 딜레마를 어떻게 해결할 수 있습니까?

저는 펜스 2에서 (테이블 3에서 오는) 컨트롤러 2에 경고 할 수있을 것입니다. 나는 컨트롤러 2에 대해 또 다른 indexpath 변수를 만들 수 있거나 컨트롤러 2에서 in 문을 만들 수있는 것처럼 느낀다. 그러나 나는 그 경로에 대해 어떻게 갈 것인지에 대해서는 모호하다. 제안?

답변

0

무엇이든지 클래스 3에서 클래스 2에 알리려면 프로토콜/위임 방법을 사용해야합니다. 이것은이

if segue.identifier == "your identifier" { 
    let destination = segue.destinationViewController as? MyClass3 
    destination.delegate = self 
} 

를 호출해야 prepareForSegue에서 그런 다음이

protocol MyClass3Delegate { 
    func clicked() 
} 

class MyClass3: UIColletionViewCell { 
    var delegate : MyClass3Delegate? 

    //call delegate?.clicked() when you dismiss the ViewController 

} 

()처럼 할 수있는 당신의 Class2의 당신은 프로토콜 확장이 작업을 수행해야합니다

extension MyClass2: MyClass3 { 
    func clicked() { 
    //do your logic here 
    } 
} 
관련 문제