我正在尝试制作一个将标签拖动到正确框中的场景。但我得到一个"线程1:EXC_BAD_ACCESS(代码= 2,着装= 0x107867618)"每当我尝试访问任何框的labelInside变量时,都会出错,无论是设置还是检索它。香港专业教育学院尝试检查与僵尸的解除分配但没有找到任何东西。我也尝试删除getter和setter,只是简单地将其设置为其中一个标签,但即使这样,它也会在检索时崩溃。根据我的研究,我认为它可能是一个腐败的指针,或者课程没有正确初始化,但我完全坚持如何解决它。我的代码" LabelBox"它崩溃的功能如下。任何帮助将非常感谢!谢谢。
int removeZeros(int candid)
{
int output = 0;
string s(itoa(candid));
for (int i = s.size(); i != 0; --i)
{
if (s[i] != '0') output = output * 10 + atoi(s[i]);
}
return output;
}
答案 0 :(得分:0)
了解您如何定义setter
labelInside
var labelInside:UILabel? {
get {
return self.labelInside ?? nil
}
set(newLabel) {
labelInside?.center.x += 20
self.labelInside = newLabel // this cause an infinite loop!
self.labelInside!.center = self.center
}
}
这意味着,稍后,当您编写box.labelInside = label
时,执行setter
但在你的内心深处
self.labelInside = newLabel
这会产生对setter的另一次调用,再次执行
self.labelInside = newLabel
确实产生了对setter的另一个调用......这个循环永远不会结束。
只需从您的二传手中删除此行即可。
self.labelInside = newLabel
您的代码中还有另一个错误,现在它不会导致崩溃,但将来可能会崩溃。
这一行
self.labelInside!.center = self.center
应更改如下
self.labelInside?.center = self.center
好的,请尝试更新您的setter,如下所示
set(newLabel) {
newLabel?.center.x += 20 // this line is useless and can be removed
newLabel?.center = self.center
}
请删除当前的labelInside
属性(包括getter和setter)并替换为此。
var labelInside:UILabel? {
didSet(newLabel) {
newLabel?.center = self.center
}
}