iOS 8.3上的self.view.viewWithTag()出错

时间:2015-11-16 23:23:58

标签: ios swift ios8 ios9

我试图删除我之前添加到UIViewController视图中的视图。代码正在iOS 9上运行,但在模拟器中崩溃了8.3。

我在添加之前为视图指定了100个标记。

出于调试目的,我通过执行

检查以确保标记为100的视图
for view in self.view.subviews {
    print(view.tag)
}

我看到输出为100,但XCode显示

Thread 1: EXC_BAD_ACCESS(code=1, address... )

在这一行

let view = self.view.viewWithTag(100)

3 个答案:

答案 0 :(得分:0)

不要使用标签。只是不要。 Apple建议开发人员不要在今年的WWDC session(14:43)中使用标签:

  

所以我的意思是,如果你使用View With Tag或Set Tag UIView API和运输代码,我将鼓励你摆脱它。 ..当你不仅没有得到编译器警告时,你得到的任何运行时错误都不会说明你使用带标签的视图。

改为使用类属性(IBOutlets)。这是今天最常见的做法。

答案 1 :(得分:0)

我的问题实际上并不在

$myDate =  date("Y/n/j",strtotime(str_replace('/','-',$data[0])));
$import->bindParam(1, $myDate, PDO::PARAM_STR);

线。该行导致错误,但这是因为我将视图添加到

中的层次结构中
self.view.viewWithTag 

方法。这仍然适用于iOS 9。

我将视图添加到了

viewWillLoad

方法,它适用于iOS8和iOS9

答案 2 :(得分:-1)

如果您使用的是Nibs/XIB,则问题可能是由于ViewController未正确初始化造成的。

此问题是由init()

使用的默认UIViewController引起的

我也遇到过这个问题,这个问题通过执行此代码片段来修复

required init() {
    super.init(nibName: <nameOfYourNib>, bundle: nil)
}

required init?(coder aDecoder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
}