2017-01-10 1 views
0

У меня есть 4 глобальных переменных (массивы String), которые я добавляю в один контроллер представления (скажем, firstViewController). После добавления значения при попытке доступа к ним в другом контроллере представления нили значения передаетсяГлобальная переменная, возвращающая значение nil при использовании в контроллере различного вида

Первого ViewController

print("\(json)") 
      if let stockInfo = json?[0] { 

       if let value = stockInfo["l"] as? String { 
        print("Teja\(value)") 
        stockCurrentValue.append(value) 
        print("Teja\(stockCurrentValue)") 

       } 

       if let cp = stockInfo["cp"] as? String{ 
        print("Teja\(cp)") 
        stockCp.append(cp) 
        print("Tea\(stockCp)") 
       } 

       if let c = stockInfo["c"] as? String{ 
        print("Teja\(c)") 
        stockC.append(c) 

       } 
       if let pcls_fix = stockInfo["pcls_fix"] as? String{ 

        print("Teja\(pcls_fix)") 
        stockPrevValue.append(pcls_fix) 

       } 


      } 

переменных stockCurrentValue, stockC, stockCP, stockPrevValue являются четыре глобальными переменными, объявленным я.

Но когда я пытаюсь получить доступ к ним в новом ViewController

SecondViewController

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 

    print(selectedStockNames.count) 
    return selectedStockNames.count 


} 

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCell(withIdentifier: "myStocks") as! StockCell 

     cell.stockNameCell.text = selectedStockNames[indexPath.row] 


    print("Teja123\(stockCurrentValue)") 

    stockValueFromGF = selectedStockValues[indexPath.row] 

    print("Teja123\(stockCp)") 

    return cell 
} 

Так что, когда я напечатать значение StockCp в firstViewContoller я получаю значение, но когда я пытаюсь напечатать ту же переменную в seconViewController i get "[]" (значение nil)

+0

Как вы определяете 'stockCurrentValue' в' SecondViewController'? Вы уверены, что это взято из 'FirstViewController'? Даже несмотря на то, что эти свойства «FirstViewController» являются общедоступными, вам нужно явно вызвать для него некоторый момент времени в вашем «SecondViewController», например 'stockCurrentValue = firstVC.stockCurrentValue', где firstVC является экземпляром' FirstViewController' в противном случае 'FirstViewController.shared .stockCurrentValue', если это singleton –

+0

У меня есть все переменные, объявленные в отдельном быстром файле. Как я могу создать экземпляр firstVc, могу ли вы помочь мне с этим, пожалуйста. –

+0

Я уверен, что вы не создаете экземпляр 'UIViewController', чтобы просто получить несколько значений из своего подкласса. Если вы использовали подкласс 'UIViewController', вы должны были в какой-то момент уже создать его, возможно, через раскадровку, если бы не поняли, что сделали это. Чтобы ссылаться на этот экземпляр «FirstViewController», вы должны рассмотреть возможность его получения с помощью ViewController, представляющего его (rootViewController, если таковой нет), или просто может быть тот, который представляет «SecondViewController». В этом случае вы можете передать значения непосредственно перед представлением. –

ответ

0

Используйте протокол и определите его в контроллере просмотра, откуда вы хотите установить значения.

Используйте метод внутри функции, где изменяются значения глобальных переменных.

Вызовите функцию и установите делегат в контроллере представления, где вы хотите получить доступ к переменным.