传递 int EXC_BREAKPOINT(code=1 Swift Xcode ios 时出错
Error when passing an int EXC_BREAKPOINT(code=1 Swift Xcode ios
在 for 循环中将 let 变量作为标记传递时出现错误,但当我用数字替换变量时却没有出现错误。我可以 println(i) 和 return 一个数字。
为什么不接受它作为密钥?
我也试过将 var 设置为计数器,结果相同
我在以下方面遇到错误:
swift_dynamicCastObjCClassUnconditional
全部错误:
线程 1:EXC_BREAKPOINT(代码=1,子代码=0x1001ee4b0)
func updateThing() {
for (i, img) in enumerate(thingState) {
switch img {
case 0:
image = UIImage(named: "0.png");
break
case 1:
image = UIImage(named: "1.png");
break
case 2:
image = UIImage(named: "2.png");
break
default:
image = UIImage(named: "x.png");
}
thing = self.view.viewWithTag(i) as UIButton;
thing.setImage(image, forState: .Normal);
}
但是如果我用数字替换 i 则没有错误,并且带有指定标签的图像会发生变化,如果我 println(i) 我每次通过都会得到一个数字
thing = self.view.viewWithTag(2) as UIButton;
你要确保你的视图是按钮,否则它将无法投射你的视图。
func updateThing() {
for (i, img) in enumerate(thingState) {
switch img {
case 0:
image = UIImage(named: "0.png");
break
case 1:
image = UIImage(named: "1.png");
break
case 2:
image = UIImage(named: "2.png");
break
default:
image = UIImage(named: "x.png");
}
if let thing = self.view.viewWithTag(i) as? UIButton {
thing.setImage(image, forState: .Normal)
}
}
}
可选的转换运算符 (as?
) 优于转换运算符 (as
),因为它不会在转换失败时使您的应用程序崩溃。
哦,分号在 Swift 中没用 :)
编辑:
在最新的Swift版本中,as
已被as!
取代,但as
仍然存在。
as!
用于在没有检查的情况下强制施放并且容易出现裂纹。你主要用它来向下转换,你绝对确定对象的类型。
as
可以用作向上转换,例如 CAShapeLayer
到 CALayer
或其他特殊情况,例如 [NSObject:AnyObject]
到 NSDictionary
。使downcast编译失败。
问题是您没有声明 i
,而是从 thingState
隐含地获取它。没有看到后者的声明很难说,但我想你需要做
thing = self.view.viewWithTag(Int(i)) as UIButton
是的:分号是多余的;以及 break
这个问题是你误删了按钮。
并且您必须看到您的 StoryBoard 屏幕或 Xib 文件。
我想你删除了按钮。
我遇到了同样的问题,我尝试了 Shift+Cmd+K 清理项目并解决了问题
在 for 循环中将 let 变量作为标记传递时出现错误,但当我用数字替换变量时却没有出现错误。我可以 println(i) 和 return 一个数字。 为什么不接受它作为密钥?
我也试过将 var 设置为计数器,结果相同
我在以下方面遇到错误: swift_dynamicCastObjCClassUnconditional
全部错误: 线程 1:EXC_BREAKPOINT(代码=1,子代码=0x1001ee4b0)
func updateThing() {
for (i, img) in enumerate(thingState) {
switch img {
case 0:
image = UIImage(named: "0.png");
break
case 1:
image = UIImage(named: "1.png");
break
case 2:
image = UIImage(named: "2.png");
break
default:
image = UIImage(named: "x.png");
}
thing = self.view.viewWithTag(i) as UIButton;
thing.setImage(image, forState: .Normal);
}
但是如果我用数字替换 i 则没有错误,并且带有指定标签的图像会发生变化,如果我 println(i) 我每次通过都会得到一个数字
thing = self.view.viewWithTag(2) as UIButton;
你要确保你的视图是按钮,否则它将无法投射你的视图。
func updateThing() {
for (i, img) in enumerate(thingState) {
switch img {
case 0:
image = UIImage(named: "0.png");
break
case 1:
image = UIImage(named: "1.png");
break
case 2:
image = UIImage(named: "2.png");
break
default:
image = UIImage(named: "x.png");
}
if let thing = self.view.viewWithTag(i) as? UIButton {
thing.setImage(image, forState: .Normal)
}
}
}
可选的转换运算符 (as?
) 优于转换运算符 (as
),因为它不会在转换失败时使您的应用程序崩溃。
哦,分号在 Swift 中没用 :)
编辑:
在最新的Swift版本中,as
已被as!
取代,但as
仍然存在。
as!
用于在没有检查的情况下强制施放并且容易出现裂纹。你主要用它来向下转换,你绝对确定对象的类型。as
可以用作向上转换,例如CAShapeLayer
到CALayer
或其他特殊情况,例如[NSObject:AnyObject]
到NSDictionary
。使downcast编译失败。
问题是您没有声明 i
,而是从 thingState
隐含地获取它。没有看到后者的声明很难说,但我想你需要做
thing = self.view.viewWithTag(Int(i)) as UIButton
是的:分号是多余的;以及 break
这个问题是你误删了按钮。 并且您必须看到您的 StoryBoard 屏幕或 Xib 文件。 我想你删除了按钮。
我遇到了同样的问题,我尝试了 Shift+Cmd+K 清理项目并解决了问题