Помощь в проекте

ios

#1

Добрый день, проблема есть массив данных с сервера, я его отобразил в таблице в 2 ом vc, передал его в еще одну переменную, и пошел с ним далее работать по другим классам, в итоге по окончании проекта, я возвращаюсь во 2 vc , и уже в таблице ни чего не отображается, а хотелось бы чтобы первоначальные данные там увидеть
возвращаюсь вот так вот

**let** seViCon = **self** .storyboard?.instantiateViewController(withIdentifier: "ViewControllerM") **as** ! ViewControllerM

seViCon.povtor = 1

**self** .navigationController?.pushViewController(seViCon, animated: **true** )

а вот сам 2 vc

**@IBOutlet** **weak** **var** tableZayv: UITableView!

**var** povtor: Int?

**var** addressZayvki: [[String:String]] = []

**var** addressZayvkiMon:[[String:String]] = []

**var** numberToAdre: [[String:String]]!

**var** numberToAdreMon: [[String:String]]!

  
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "NaPoleZayavok" {
        if let indexPath = self.tableZayv.indexPathForSelectedRow {
            let obrabotkaVC = segue.destination as! Obrabotka
            if  seg.selectedSegmentIndex == 0 {
                obrabotkaVC.poleObrabotki = addressZayvki[indexPath.row]
            } else {
                obrabotkaVC.poleObrabotki = addressZayvkiMon[indexPath.row]
            }
        }
    }
}


//    func AddressZayvki() {
//        for (index,dict) in addressZayvki.enumerated() {
//            print("\(index+1) \(dict["Address", default: "not"])")
//        }
//    }

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
tableView.deselectRow(at: indexPath, animated: true)

}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let zayv = tableView.dequeueReusableCell(withIdentifier: "Zayv", for: indexPath)
switch seg.selectedSegmentIndex {
case 0:
    if addressZayvki[indexPath.row]["Address"] != nil {
        zayv.textLabel?.text = addressZayvki[indexPath.row]["Address"]
        
    }else {
         zayv.textLabel?.text = numberToAdre[indexPath.row]["Address"]
    }
    break
case 1:
    zayv.textLabel?.text = addressZayvkiMon[indexPath.row]["Address"]
    break
default:
    break
    
}
zayv.textLabel?.numberOfLines = 0
zayv.backgroundColor = .clear
zayv.textLabel?.textColor = .white

return zayv

}
   
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
var returnValue = 0
switch seg.selectedSegmentIndex {
case 0:
    if addressZayvki.count != nil {
    returnValue = addressZayvki.count
    } else {
        returnValue = numberToAdre.count
    }
case 1:
    if addressZayvkiMon != nil {
    returnValue = addressZayvkiMon.count
    } else {
        returnValue = numberToAdreMon.count
    }
default:
    break
}
return returnValue
}
**override** **func** viewDidLoad() {

**super** .viewDidLoad()
 numberToAdre = addressZayvki
numberToAdreMon = addressZayvkiMon
print(numberToAdreMon)
}

ка сделать чтобы и отправить данные и потом когда прихожу сюда заново их опять здесь наблюдать


#2

Во-первых, instantiateViewController, а потом pushViewController, создает ваш 2 VC заного и данных там просто быть не может.
Во-вторых, для возврата pushViewController не используется, это только вперед. Для возврата можно вернуться к определенному VC, который лежит в иерархии NavigationController’a. У NabigationController’a имеется список всех VC, которые показаны в определенном порядке. Так вот этот список можно обработать, дойти до нужного VC и закрыть все остальные, которые выше его. Таким образом, все что выше, просто скроется, а ваш 2 VC появится обратно без повторной инициализации и со всеми первоначальными данными, которые в нем были.


#3

“первоначальные данные там увидеть” - имеешь в виду те которые с сервера загрузил?

Ну и по коду замечания:
Когда контроллер создаешь, пиши в withIdentifier: не строку, а String(describing: ViewControllerM.self) ну и идентификатор задай “ViewControllerM” для контроллера. Это вроде как соглашение такое.

Так же в func prepare(for segue: ... не пиши строку идентификатора. Если у тебя один класс не обрабатывает кучу переходов. Делай кастинг

if let obrabotkaVC = segue.destination as? Obrabotka {
  //
}

По самой проблеме честного говоря мало что понял. Может накидаешь простенький пример на эти 2 контроллера и ссылку на гит дашь? Так проще будет починить.


#4

Моя ошибка в том что не правильно перехожу во 2 VC, надо через иерархию, и тогда увижу свои данные полученные первоначально с сервера.

только как это сделать:

У NabigationController’a имеется список всех VC, которые показаны в определенном порядке. Так вот этот список можно обработать, дойти до нужного VC и закрыть все остальные, которые выше его.


#5
if let viewControllers = navigationController?.viewControllers {
    for viewController in viewControllers {
        // some process
        if viewController.isKindOfClass(ViewControllerClassName) {
            println("yes it is")
        }
    } 
}

Вот статья, где говорится как перейти к конкретному VC