EXC_BAD_ACCESS在使用它来评估NSExpression之后更新Swift字典时

我正在使用字典来评估一个expression式,当expression式有variables,而字典实际上是由NSExpression使用的时候,发生了一些事情,当我试图更新字典的时候,我得到了EXC_BAD_ACCESS,这只发生在debuggingiPhone6时,而不是模拟器,而不是在iPhone 4S。

let strExpression = "a+b+20" let exp = NSExpression(format:strExpression) self.dictionary = ["a":10.0, "b":15.0, "c":25.0] let value:AnyObject = exp.expressionValueWithObject(self.dictionary, context: nil) let doubleValue = value as Double self.dictionary.updateValue(doubleValue, forKey: "c") 

奇怪的是,如果我在创build字典之后添加这行,那么它很好:

 let newDic = self.dictionary 

我,使用iOS 8.1。 提前致谢!

有了@bensarz评论,我认为如果我把答案放在实际答案中,而不是评论中,可能会对search答案有帮助。

Per @ LeeWhitney在一篇类似的文章中的回应:

看起来像一个编译器错误。

你有没有试过在Release和Debug之间切换,然后重build? 如果debugging工作,但不释放它可以是一个编译器/优化器错误的迹象。

它也发生在模拟器吗?

您的代码适用于iOS 8.1和XCode 6.1。

解决方法:通过将“Swift编译器 – 代码生成”下的“优化级别”更改为“无”来解决问题。 这个问题似乎与“最快的”编译器优化级别有关。

另外,在编译器更改之前,我已经发现了一个原创的工作:

如果在字典中赋值之前使用let语句,似乎可以缓解这个问题。 在下面的链接中find更多信息:

带有词典的iOS 8.1上的EXC_BAD_ACCESS