private func fixOverlaps(inout blocks: [TimeBlock],maxOverlaps: Int? = nil) { blocks.sortInPlace { a,b in if a.startTime < b.startTime { return true } else if a.startTime == b.startTime && a.endTime < b.endTime { return true } return false }...
请注意,从XCode调试版本不会发生崩溃.只有App Store和Ad Hoc存档才会崩溃,只有当阻止列表的长度在数百上.
我修改了代码,问题消失了:
private func fixOverlaps(inout blocks: [TimeBlock],maxOverlaps: Int? = nil) { blocks = blocks.sort { a,b in if a.startTime < b.startTime { return true } else if a.startTime == b.startTime && a.endTime < b.endTime { return true } return false }...
有没有想过如何使用inout或sortInPlace的东西?我可以尝试做一个这样的演示.它是在多个版本的iOS(8/9)和Swift 2.1.
编辑 – – – – – – – – – –
好的,这是一个崩溃的最小版本.原来,这是一个红色的鲱鱼.如果您在XCode 7.1中启动新的单视图项目,则可以使用以下命令替换视图控制器:
class VIEwController: UIVIEwController {overrIDe func vIEwDIDLoad() { super.vIEwDIDLoad() // Do any additional setup after loading the vIEw,typically from a nib. var blocks = [TimeBlock]() for var i in 0...20 { //Works if you put in a small number like 8 let t = TimeBlock() t.start = Int(arc4random_uniform(1000)) //Get some random numbers so the sort has to do some work t.end = Int(arc4random_uniform(1000)) blocks.append(t) } blocks.sortInPlace { a,b in if a.start > b.start { return true } return false } print("done") //Gets here on deBUG,not release}class TimeBlock { var start = 0 var end = 0}overrIDe func dIDReceiveMemoryWarning() { super.dIDReceiveMemoryWarning() // dispose of any resources that can be recreated.}}
所以运行它在发行版,你应该看到它打印“完成”,如果你结束循环约17,但崩溃与20完全数字可能会有所不同.
@H_301_21@解决方法 这段代码看起来是正确的.这听起来像是在编译器中遇到了一个错误,通常情况是在发布配置崩溃但不调试时.您可以通过在调试构建和测试中进行优化来查看是否生成问题来验证.除了您的解决方法外,您唯一需要做的其他事情是 file a bug. 总结以上是内存溢出为你收集整理的ios – Swift 2.1错误排序到位,仅在发布版本上全部内容,希望文章能够帮你解决ios – Swift 2.1错误排序到位,仅在发布版本上所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)