带有字典的iOS 8.1上的EXC_BAD_ACCESS

时间:2014-11-07 20:59:56

标签: dictionary swift ios8.1

我有一个可以通过结构中的静态var访问的对象(现在swift中缺少类变量支持的解决方法),结构如下:

struct Constants{
    static var myObj = MyObject()
}

MyObject中有一个字典,如下所示:

class MyObject{
    private var params = Dictionary<String,AnyObject>()

    func addParam(key:String, value:AnyObject){
        params[key] = value
    }
}

现在第一次调用Contants.myObj.addParam("param", value:123)的此对象时,一切都很好,而params的内容为["param":123]。在Contants.myObj.addParam("param", value:456)的第二次调用中,我得到了一个EXC_BAD_ACCESS。

这里是踢球者,但这只发生在iOS 8.1中。另外,如果我将行let stupidHack = self.params添加为addParam方法的第一行,则可以正常使用。我的假设是它涉及字典的可变性。 let可能会以某种方式触发字典在初始化后再次变为可变。

之前是否有其他人遇到此问题?有关如何修复的想法吗?

谢谢!

4 个答案:

答案 0 :(得分:6)

看起来像编译器错误。

您是否尝试在Release和Debug之间切换然后重建?如果调试有效但没有释放,则可能表示编译器/优化器错误。

是否也会在模拟器中发生?

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

答案 1 :(得分:1)

偶然的机会,你有64Gb的iPhone 6吗? 我有一个,我有两次使用词典的相同问题。

在新闻中(以及科技新闻......),我读到东芝为这款iPhone型号提供的有缺陷的内存模块可能导致内存分配不正确。

答案 2 :(得分:1)

尝试将Swift编译器优化级别调整为&#34;无&#34; (构建设置)。

我有一个类似的问题,一个类被解除分配没有明显的原因,它主要是像李说的编译器错误。

答案 3 :(得分:0)

通过在应用程序目标的构建设置中禁用swift编译器优化来解决swift代码的类似问题并修复此类问题。