尽管在 IB 中链接,但标签仍为 nil
Posted
技术标签:
【中文标题】尽管在 IB 中链接,但标签仍为 nil【英文标题】:Label is found as nil despite being linked in IB 【发布时间】:2016-11-21 21:47:28 【问题描述】:Swift3/Xcode 8.1
以下代码...
class PageContentVC: UIPageViewController, UIPageViewControllerDataSource, UIPageViewControllerDelegate
var array = [String]()
var currentIndex = 0
override func viewDidLoad()
super.viewDidLoad()
array = ["1","2","3","4"]
self.dataSource = self
self.delegate = self
self.setViewControllers([helperFunction(index: currentIndex)], direction: .forward, animated: true, completion: nil)
func helperFunction(index: Int) -> UIViewController
let newVC = storyboard?.instantiateViewController(withIdentifier: "PageContent") as! PageContent
print("currentIndex is: \(currentIndex)")
print("value at currentIndex is: \(array[currentIndex])")
newVC.PageContentLabel.text = array[currentIndex]
return newVC
func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController?
if (currentIndex == 0) || (currentIndex == NSNotFound)
return nil
currentIndex -= 1
return helperFunction(index: currentIndex)
func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController?
if (currentIndex == array.count - 1) || (currentIndex == NSNotFound)
return nil
currentIndex += 1
return helperFunction(index: currentIndex)
...在以下行中使用“Unexpectedly found nil while unwrapping an optional value”错误使应用程序崩溃:
newVC.PageContentLabel.text = array[currentIndex]
'PageContentLabel' 肯定是通过界面生成器链接的,当我注释掉有问题的行时,应用程序运行良好。
我在这里错过了什么?
【问题讨论】:
你确定 newVC 不是 nil 吗? 【参考方案1】:标签是nil
,因为您已经实例化了视图控制器,但是在故事板中定义的视图层次结构(如在 IB 中配置的那样)在相应的视图出现之前不会构建。您应该在您的视图控制器中添加一个字符串属性并让helperFunction
填充它,而不是IBOutlet
。然后,PageContent
的viewDidLoad
应该采用该字符串属性并使用它来设置UILabel
的text
。最重要的是,在调用viewDidLoad
之前不要尝试使用这些插座。
【讨论】:
非常感谢!已排序!【参考方案2】:使用插座不是更简单吗?
@IBOutlet weak var PageContentLabel: UILabel!
从情节提要中的 UILabel 中按住 ctrl 拖动到类正下方的 PageContentVC 文件中,然后创建一个插座并为其命名。
【讨论】:
问题是他试图进入另一个视图控制器并设置一个标签,这是一个糟糕的设计。请参阅 Rob 的回答。以上是关于尽管在 IB 中链接,但标签仍为 nil的主要内容,如果未能解决你的问题,请参考以下文章
UILabel 子类 - 尽管标签高度正确,但文本在底部被截断