Swift:prepareForSegue上的exc_breakpoint(code = exc_arm_breakpoint subcode = 0xdefe)

时间:2015-02-07 09:07:40

标签: ios swift

出于某种原因,当达到performSegueWithIdentifier行时,我收到此错误。

我有这段代码:

if let storedAPIKeychain: AnyObject = dictionary.objectForKey("api_key") {

            println(storedAPIKeychain)

            //This is the line that causes the problems. 
            performSegueWithIdentifier("skipBrandSegue", sender: self)

        }

println()正常工作并输出正确的信息。

我正在尝试将 storedAPIKeychain 与segue一起传递:

override func prepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject!) {
    if segue.identifier == "skipBrandSegue" {

        // Create a new variable to store the instance of the next view controller
        let destinationVC = segue.destinationViewController as brandsViewController
        destinationVC.storedAPIKey = storedAPIKeychain!

     }
}

我认为可能是问题所在。但是,当我将该行更改为:

destinationVC.storedAPIKey = "someAPIplaceholder"

我也得到了同样的错误。

有人可以告诉我这个错误是什么以及如何解决它。谢谢。

编辑:错误的屏幕截图: Xcode DebugError

2 个答案:

答案 0 :(得分:4)

动态强制转换类无条件表示强制转换失败,因为变量无法转换为其他类型。

在你的代码中,我只看到一行演员:

let destinationVC = segue.destinationViewController as brandsViewController

表示目标视图控制器不是brandsViewController的实例。

解决问题:

  • 在接口构建器中检查目标视图控制器的自定义类属性是否已正确设置为brandsViewController
  • 检查segue是否实际指向该视图控制器

如果以上都不能解决问题,请在该行设置断点并检查目标视图控制器的实际类型。

附注:按照惯例,在swift中,所有类型名称都以大写字母开头,而函数,变量和属性以小写字母开头。如果您想让其他快速开发人员可以阅读您的代码,我建议您坚持使用该约定(将brandsViewController重命名为BrandsViewController

答案 1 :(得分:4)

@antonios的回答应该可以解决你的问题。中断是由于对象未被强制转换(找到并分配)。

只是旁注:你会对这一行有一些问题:

if let storedAPIKeychain: AnyObject = dictionary.objectForKey("api_key")

特别是如果您希望从中获取String并在ViewControllers之间传递它?

将其转换为String,创建一个全局范围变量,然后将其分配给要使用的变量 - 这样会更容易处理。

var globalVariable = "" //add this line at the top, just before your class declaration. 

if let storedAPIKeychain = dictionary.objectForKey("api_key") as? String {
    self.globalVariable = storedAPIKeychain
}