ios – Swift 2.1错误排序到位,仅在发布版本上

前端之家收集整理的这篇文章主要介绍了ios – Swift 2.1错误排序到位,仅在发布版本上前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我开始在下面的代码中找到lamdba的崩溃报告,下面的灰色框中的第三行:
  1. private func fixOverlaps(inout blocks: [TimeBlock],maxOverlaps: Int? = nil) {
  2. blocks.sortInPlace { a,b in
  3. if a.startTime < b.startTime {
  4. return true
  5. } else if a.startTime == b.startTime && a.endTime < b.endTime {
  6. return true
  7. }
  8. return false
  9. }
  10. ...

请注意,从XCode调试版本不会发生崩溃.只有App Store和Ad Hoc存档才会崩溃,只有当阻止列表的长度在数百上.

修改代码,问题消失了:

  1. private func fixOverlaps(inout blocks: [TimeBlock],maxOverlaps: Int? = nil) {
  2. blocks = blocks.sort { a,b in
  3. if a.startTime < b.startTime {
  4. return true
  5. } else if a.startTime == b.startTime && a.endTime < b.endTime {
  6. return true
  7. }
  8. return false
  9. }
  10. ...

有没有想过如何使用inout或sortInPlace的东西?我可以尝试做一个这样的演示.它是在多个版本的iOS(8/9)和Swift 2.1.

编辑 – – – – – – – – – –

好的,这是一个崩溃的最小版本.原来,这是一个红色的鲱鱼.如果您在XCode 7.1中启动新的单视图项目,则可以使用以下命令替换视图控制器:

  1. class ViewController: UIViewController {
  2.  
  3. override func viewDidLoad() {
  4. super.viewDidLoad()
  5. // Do any additional setup after loading the view,typically from a nib.
  6.  
  7. var blocks = [TimeBlock]()
  8. for var i in 0...20 { //Works if you put in a small number like 8
  9. let t = TimeBlock()
  10. t.start = Int(arc4random_uniform(1000)) //Get some random numbers so the sort has to do some work
  11. t.end = Int(arc4random_uniform(1000))
  12. blocks.append(t)
  13. }
  14.  
  15. blocks.sortInPlace { a,b in
  16. if a.start > b.start {
  17. return true
  18. }
  19. return false
  20. }
  21.  
  22. print("done") //Gets here on debug,not release
  23. }
  24.  
  25. class TimeBlock {
  26. var start = 0
  27. var end = 0
  28. }
  29.  
  30. override func didReceiveMemoryWarning() {
  31. super.didReceiveMemoryWarning()
  32. // Dispose of any resources that can be recreated.
  33. }
  34.  
  35.  
  36. }

所以运行它在发行版,你应该看到它打印“完成”,如果你结束循环约17,但崩溃与20完全数字可能会有所不同.

解决方法

这段代码看起来是正确的.这听起来像是在编译器中遇到了一个错误,通常情况是在发布配置崩溃但不调试时.您可以通过在调试构建和测试中进行优化来查看是否生成问题来验证.除了您的解决方法外,您唯一需要做的其他事情是 file a bug.

猜你在找的iOS相关文章