Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.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
Ios EXC\u错误\u访问内核\u无效\u地址崩溃_Ios_Swift_Exc Bad Access - Fatal编程技术网

Ios EXC\u错误\u访问内核\u无效\u地址崩溃

Ios EXC\u错误\u访问内核\u无效\u地址崩溃,ios,swift,exc-bad-access,Ios,Swift,Exc Bad Access,我的应用程序一直通过Xcode在调试模式下运行良好,但每当通过TestFlight下载时,它都会因以下错误而崩溃:EXC\u BAD\u ACCESS KERN\u INVALID\u ADDRESS 0x000200013f7b9e78 它在这条线上崩溃了。我在这个堆栈跟踪中看到了专用数组。WithUnsafemtableBufferPoint,它可能与此相关 self.array.sortInPlace. { (($0 as Dictionary<Str

我的应用程序一直通过Xcode在调试模式下运行良好,但每当通过TestFlight下载时,它都会因以下错误而崩溃:
EXC\u BAD\u ACCESS KERN\u INVALID\u ADDRESS 0x000200013f7b9e78

它在这条线上崩溃了。我在这个堆栈跟踪中看到了
专用数组。WithUnsafemtableBufferPoint
,它可能与此相关

self.array.sortInPlace. {
                (($0 as Dictionary<String, AnyObject>)["time"] as? String) > (($1 as Dictionary<String, AnyObject>)["time"] as? String)
            }
更新:

这都在Swift 2中,数组是一个字典数组,声明为
var-array=[[String:AnyObject]]()
。它是通过附加一系列字典来填充的,就像这样

self.dict["foo"] = 0
self.dict["bar"] = "dog"
self.array.append(self.dict)
我担心的是它在一个
调度组中通知
;它正在等待一系列的
dispatch\u group\u leave
s。这可能与此有关吗?看起来是这样的:

dispatch_group_notify(group, queue) { () -> Void in

      self.array.sortInPlace {
          (($0["foo"] as? Int) > (($1 )["foo"] as? Int))
      }
}

关于更新中的代码:

由于数组是“手动”填充的,因此最可靠(也是有效且符合Swift类型安全性的)方法是使用具有非可选属性的自定义类,而不是通用字典

class Item {
  var foo : Int
  var bar : String

  init(foo : Int, bar : String) {
    self.foo = foo
    self.bar = bar
  }
}

var array = [Item]()
array.append(Item(foo: 0, bar: "dog"))
array.append(Item(foo: 1, bar: "cat"))

array.sortInPlace { $0.foo > $1.foo }
所有类型都是众所周知的非可选类型


没有类型转换,没有拆封,没有开销,没有问题。

我也遇到同样的问题,但它只影响约50%的设备,并且只影响运行该应用程序的版本的设备。我的代码没有使用类似于
dispatch\u group
的任何东西

就我而言,我使用的代码如下:

contacts.sortInPlace({ $0.name.localizedCaseInsensitiveCompare($1.name) == .OrderedAscending })
当我将其替换为以下内容时,它已修复:

contacts = contacts.sort({ $0.name.localizedCaseInsensitiveCompare($1.name) == .OrderedAscending })
由于它只影响有限数量的用户,在低级别的Swift API中崩溃,并通过替换为
排序
进行修复,我相信这是苹果代码中的一个缺陷

我建议同时使用
sort

注意:您的代码和我的代码之间的另一个相似之处是(即$0和$1)的用法。然而,即使我用命名参数替换这些参数,它仍然会崩溃


更新:很多人都是。根据该线程,它似乎在最新的Xcode测试版中得到了修复

这是一个老问题,但在调试运行中很难重现EXC_BAD_ACCESS KERN_INVALID_ADDRESS的主要原因是调试版本和发布版本中释放对象的生命周期不同。在后者中,内存会立即消失,可能会被一个不相关的对象替换,而在前者中,内存可能仍会保留一段时间,因此您的应用程序仍然可以顺利运行。同样,当这种情况在发布版本中发生时,崩溃跟踪的最后一行可能会令人困惑,因为引用的对象可能是完全不相关的类型。如果是这种情况,我们应该在堆栈树中查找一点,希望能找到更多线索。

我遇到的一个错误是我在Objective-C中声明了一个非null属性,但忘记了初始化它,然后尝试在Swift中使用它。

那么这个数组是什么,它是如何声明的,它是如何填充的,里面有什么?@matt see更新。如果您需要更多信息,请告诉我。这可能不相关,但我很难理解尝试对可选项进行排序有什么意义。如果你知道这些东西是Int或者String或者其他的,你应该把它们排序为Int或者String或者其他的。在进行强制转换时是否存在失败的可能性,如果是,那么在这种情况下会发生什么?我无法将二进制运算符应用于两个
AnyObject
s,因此我需要键入将数组的字典值强制转换为某个值,在本例中为Int。没有失败的可能性。我刚打开包装,谢谢你的接球,但我不确定这是否是我的大问题。铸造,好的。但你是随意选角的
($0[“foo”]as?Int
不是Int。它是可选的。正如我所说,这可能无关紧要,但在这种情况下做这件事很奇怪。
contacts = contacts.sort({ $0.name.localizedCaseInsensitiveCompare($1.name) == .OrderedAscending })