我正在使用 AFNetworking
从我的服务器获取数据,我正在像这样对 json 数组进行排序:
func comparator(a: Dictionary, b: Dictionary) -> Bool {
let first: String = a["type_name"] as String!
let sec: String = b["type_name"] as String!
if (first == sec) {
let first_type: String = a["name"] as String!
let sec_type: String = b["name"] as String!
return first_type < sec_type
}
return first < sec
}
var initialArray = jsonDictionary["VALUES"] as Array<Dictionary<String, AnyObject>>
var docArray = sorted(initialArray, comparator)
当我在我的 iPhone 上以 Debug模式(通过 xcode 编译)运行该应用程序时,这非常有效。但是,当我通过 Testflight、应用程序商店或临时部署执行此操作时,它会崩溃。我尝试用它进行一些调试,结果发现排序是错误的来源。我从 adhoc 和应用商店(使用 Appsee)获得的堆栈跟踪是:
_TTSGVSs26UnsafeMutableBufferPointerGVSs10DictionarySSPSs9AnyObject___GS_GS0_SSPS1____Ss21MutableCollectionType_GVSs28UnsafeBufferPointerGeneratorGS0_SSPS1____GS3_GS0_SSPS1____Ss13GeneratorType_GS0_SSPS1____SiSiSs21RandomAccessIndexType_SiSiSs18_SignedIntegerType_SiSiSs33_BuiltinIntegerLiteralConvertible_SiSiSs16SignedNumberType_SiSiS7__Si_GS0_SSPS1______TFSs14_introSortImplUSs21MutableCollectionType_USs13GeneratorType__Ss21RandomAccessIndexType_Ss18_SignedIntegerType_Ss33_BuiltinIntegerLiteralConvertible_Ss16SignedNumberType_S3_____FTRQ_GVSs5RangeQQ_5Index_RFTQQQ_9Generator7ElementS8__SbSi_T_
当我通过这样做删除上面的排序时:
var docArray = jsonDictionary["VALUES"] as Array<Dictionary<String, AnyObject>>
临时部署的应用程序运行良好。出现上述错误的原因是什么?为什么我的排序在 Debug模式下很好,但在应用程序的任何 Release模式下都没有?我完全坚持这一点!
我彻底阅读了 Apple 的相关文档:
最佳答案
这似乎是 Swift
的一个错误,否则我不知道为什么会这样。以前,我在 AFNetworking
的成功 block 中定义了 comparator
函数。我从那里删除它并将它作为类的方法并以某种方式修复它。我不确定为什么这是一个修复,因为我在我的代码的其他部分做了类似的事情并且无论如何它都有效。
关于arrays - 使用 Swift 排序数组错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27310196/