Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dictionary 使用字典在iOS 8.1上执行错误访问_Dictionary_Swift_Ios8.1 - Fatal编程技术网

Dictionary 使用字典在iOS 8.1上执行错误访问

Dictionary 使用字典在iOS 8.1上执行错误访问,dictionary,swift,ios8.1,Dictionary,Swift,Ios8.1,我有一个可以通过结构中的静态变量访问的对象(解决目前swift中缺少类变量支持的问题),结构如下: struct Constants{ static var myObj = MyObject() } MyObject中有一个字典,如下所示: class MyObject{ private var params = Dictionary<String,AnyObject>() func addParam(key:String, value:AnyObject

我有一个可以通过结构中的静态变量访问的对象(解决目前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
    }
}
类MyObject{
private var params=Dictionary()
func addParam(键:字符串,值:AnyObject){
参数[键]=值
}
}
现在,对于
Contants.myObj.addParam(“param”,value:123)
的第一个对象调用,一切正常,params有内容
[“param”:123]
。在第二次调用
Contants.myObj.addParam(“param”,value:456)
时,我获得了一个EXC\u BAD\u访问权限

不过这里有一个关键点,这只发生在iOS 8.1中。另外,如果我添加一行
let stupidHack=self.params
作为我的
addParam
方法的第一行,它工作正常。我的假设是它处理字典的易变性。let可能会以某种方式触发字典在初始化后再次可变

以前有没有其他人遇到过这个问题?你知道怎么修吗


谢谢

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

您是否尝试过在发布和调试之间切换,然后重新构建?如果调试工作正常但未发布,则可能表明存在编译器/优化器错误

它是否也发生在模拟器中


你的代码在iOS 8.1和XCode 6.1上对我有效。

碰巧,你有64Gb的iPhone 6吗? 我有一个问题,我两次使用字典也有同样的问题


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

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

尝试调整swift编译器优化级别设置为“无”(生成设置)


我遇到了一个类似的问题,一个类被无缘无故地释放,这主要是一个编译器错误,就像Lee所说的。

它在模拟器中运行良好,但在物理设备(IPhone 6)上运行不正常。这个问题只发生在发布模式下,非常奇怪,这似乎是某种错误。然而,我上面发布的let hack确实纠正了这个问题。我的假设是它处理字典的易变性。let可能会在初始化后以某种方式触发字典,使其再次可变。有人知道这是否已向苹果报告/已在Swift 1.2中修复?通过将“Swift编译器-代码生成”下的优化级别更改为“无”,可以在最新的XCode中修复此错误“最快”似乎是导致编译器错误的原因。我正在构建的Mac应用程序也有同样的问题。不管发生什么事,我的车在第三次的时候就撞坏了。你让愚蠢的黑客方法对我有用。真奇怪,不过谢谢你!