【发布时间】:2015-11-29 10:59:58
【问题描述】:
我正在尝试制作一个场景,您可以将标签拖入正确的框中。但是,每当我尝试访问我的任何框的 labelInside 变量以设置或检索它时,我都会收到“线程 1:EXC_BAD_ACCESS (code=2,dress = 0x107867618)”错误。我试过检查僵尸的释放,但一无所获。我还尝试删除 getter 和 setter,只需将其设置为其中一个标签,但即便如此,它也会在检索时崩溃。根据我的研究,我认为它可能是一个损坏的指针,或者该类没有正确初始化,但我完全不知道如何修复它。我的“LabelBox”类代码及其崩溃的函数如下。任何帮助将不胜感激!谢谢。
class LabelBox:UIView {
let correctLabel:UILabel? = nil
var labelInside:UILabel? {
get {
return self.labelInside ?? nil
}
set(newLabel) {
newLabel?.center = self.center
}
}
var containsCorrectLabel:Bool {
get {
return correctLabel == labelInside
}
}
}
override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?) {
let touch:UITouch! = touches.first as UITouch!
location = touch.locationInView(self.view)
print(box1.correctLabel) //this works
//print(box1.labelInside) //crashes when trying to get, even if value set to a label
if let label = labelTouching {
if let box = checkPointInBox(location) {
box.labelInside = label //crashes when trying to set
}
}
labelTouching = nil
}
func checkPointInBox(location: CGPoint) -> LabelBox? {
let boxes = [box1, box2, box3]
for box in boxes {
if CGRectContainsPoint(box.frame, location){
return box
}
}
return nil
}
【问题讨论】:
-
correctLabel 与 "let" 为 nil,表示它是不可变的,表示它始终为 nil
-
谢谢,没发现。现在我已经更改了它,我在尝试访问正确标签时也遇到了类似的 BAD_ACCESS 错误
标签: ios xcode swift swift2 xcode7