传递 int EXC_BREAKPOINT(code=1 Swift Xcode ios) 时出错

Posted

技术标签:

【中文标题】传递 int EXC_BREAKPOINT(code=1 Swift Xcode ios) 时出错【英文标题】:Error when passing an int EXC_BREAKPOINT(code=1 Swift Xcode ios 【发布时间】:2015-02-17 13:03:06 【问题描述】:

在 for 循环中将 let 变量作为标记传递时出现错误,但在将变量替换为数字时却没有。我可以 println(i) 并返回一个数字。 为什么不接受它作为密钥?

我也尝试将 var 设置为具有相同结果的计数器

我收到以下错误: swift_dynamicCastObjCClassUnconditional

完全错误: 线程 1:EXC_BREAKPOINT(code=1, subcode=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;

【问题讨论】:

【参考方案1】:

您要确保您的视图是按钮,否则它将无法投射您的视图。

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 可以用作向上转换,例如 CAShapeLayerCALayer 或其他特殊情况,例如 [NSObject:AnyObject]NSDictionary。向下转换将无法编译。

【讨论】:

谢谢!那行得通,我现在也明白为什么 现在有三种类型的演员表,我因此更新了我的答案。【参考方案2】:

问题是您没有声明i,而是从thingState 隐式获取它。没有看到后者的声明很难说,但我想你需要这样做

thing = self.view.viewWithTag(Int(i)) as UIButton

是的:分号是多余的;以及break

【讨论】:

全局 enumerate 函数返回一个带有索引和对象的元组。我没有在 Swift 文档中看到索引的类型 索引取自thingState的声明。我想这类似于[String:AnyObject] 而不是[Int:AnyObject]。所以编译器采用String。如果你使用Int(...) 投射它应该没问题。【参考方案3】:

这个问题是你错误地删除了按钮。 并且您必须看到您的 StoryBoard 屏幕或 Xib 文件。 我想你删除了按钮。

【讨论】:

【参考方案4】:

我遇到了同样的问题,我尝试了 Shift+Cmd+K 来清理项目并解决了问题

【讨论】:

以上是关于传递 int EXC_BREAKPOINT(code=1 Swift Xcode ios) 时出错的主要内容,如果未能解决你的问题,请参考以下文章

使用 self.window?.makeKeyAndView() 时的 EXC_BREAKPOINT

错误 - EXC_BREAKPOINT(代码=1,子代码=0x100308448)

App Store 崩溃报告 EXC_BREAKPOINT (SIGTRAP)

线程 1: EXC_BREAKPOINT (code=1, subcode=0x10136bb50) - swift

应用审查小组的 EXC_BREAKPOINT (SIGTRAP)。不可重现

应用程序启动时的 EXC_BREAKPOINT (SIGTRAP)