全局变量在不同视图控制器中使用时返回空值
Posted
技术标签:
【中文标题】全局变量在不同视图控制器中使用时返回空值【英文标题】:Global variable returning nil value when used in diffrent view controller 【发布时间】:2017-01-10 03:40:15 【问题描述】:我有 4 个全局变量(字符串数组),我将它们附加到一个视图控制器(比如 firstViewController)中。当我尝试在另一个视图控制器中访问它们时附加值后,正在传递一个 nil 值
第一个视图控制器
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 中访问它们时
第二视图控制器
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
因此,当我在 firstViewContoller 中打印 StockCp 值时,我得到了该值,但是当我尝试在 seconViewController 中打印相同的变量时,我得到“[]”(零值)
【问题讨论】:
如何确定SecondViewController
中的stockCurrentValue
?你确定它取自FirstViewController
吗?即使FirstViewController
的这些属性是可公开访问的,您也需要在SecondViewController
中的某个时间点显式调用它,例如stockCurrentValue = firstVC.stockCurrentValue
其中firstVC 是FirstViewController
的实例,否则FirstViewController.shared.stockCurrentValue
如果它是单例
我在一个单独的 swift 文件中声明了所有变量。我怎样才能创建一个实例firstVc,请你帮我。
我很确定您不会创建 UIViewController
的实例来仅从其子类中检索一些值。如果您使用了UIViewController
子类,您应该在某个时候已经创建了它,如果您没有意识到自己这样做了,可能通过情节提要。要引用 FirstViewController
的实例,您应该考虑从呈现它的 ViewController 中检索它(如果没有,则为 rootViewController),或者它可能只是呈现 SecondViewController
的那个实例。在这种情况下,您可以在演示文稿之前传递值。
或者,您需要向我展示您如何填充 SecondViewController
属性,例如 selectedStockValues
和 stockCurrentValue
,以便我帮助您识别错误
【参考方案1】:
使用协议并在要设置值的视图控制器中定义它。
使用函数内部的方法来改变全局变量的值。
调用函数并在要访问变量的视图控制器中设置委托。
【讨论】:
以上是关于全局变量在不同视图控制器中使用时返回空值的主要内容,如果未能解决你的问题,请参考以下文章