2017-01-20 16 views
0

В моем контроллере 1 у меня есть таблица. В зависимости от выбора ячейки индексный путь переходит к контроллеру 2, который также является таблицей. С этим segued indexpath у меня есть функция CloudKit, которая загружает соответствующий массив из этого указательного пути, например ...Как работать с nil (при развертывании необязательного значения) во время посещения предыдущего контроллера

var newindex: IndexPath!

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() 
} 

Однако, когда я selet один из этих экземпляров массива, я привел к одному конкретному экземпляру контроллера 3. Это не проблема, но, когда я иду «Назад», чтобы выбрать другой экземпляр, мой сбоев программы. Что понятно. В настоящее время моя логика настроена на переход от контроллера 1 к 2 к 3, но не от 3 до 2 на основе моей функции indexpath/table. Поэтому как я смогу исправить эту маленькую дилемму?

Я нахожусь на заборе, как я мог бы предупредить контроллер 2, что (исходя из таблицы 3). Мне кажется, что я могу создать другую переменную indexpath для контроллера 2, или я мог бы создать оператор in в контроллере 2, но я не понимаю, как бы я пошел по этому пути. Предложения?

ответ

0

Чтобы сообщить классу 2 из 3-го класса все, что вы должны использовать методы протоколов/делегатов. Это может быть сделано как этот

protocol MyClass3Delegate { 
    func clicked() 
} 

class MyClass3: UIColletionViewCell { 
    var delegate : MyClass3Delegate? 

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

} 

Тогда в prepareForSegue() вы должны вызвать этот

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

и в вашем Class2 вы должны сделать это, чтобы расширить протокол:

extension MyClass2: MyClass3 { 
    func clicked() { 
    //do your logic here 
    } 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^