ios - .hash 给出 EXC_BREAKPOINT (code=EXC_ARM_BREAKBOINT

标签 ios swift reflection hash

我正在尝试使用 EVCloudKitDao 在我的对象上实现 Hashable 协议(protocol)其中所有属性都将通过反射用于散列。对于某些属性,我遇到了错误:

EXC_BREAKPOINT (code=EXC_ARM_BREAKBOINT

当我过滤掉有这个问题的 key 时,有时之前正常的 key 会突然出现这个错误。

错误截图如下:

enter image description here

可以在以下位置找到存在此问题的完整代码:EVReflection.swift

我在以 EVCloudKitDataObject 作为基础对象的对象上请求 .hash 时收到错误。

最佳答案

此问题是由于 Int 溢出引起的。更改代码后,您在下面看到的错误消失了:

    public class func hashValue(theObject: NSObject) -> Int {
    var hash : Int = 0
    var counter : Int = 0
    for (key, value) in toDictionary(theObject) {
        hash = hash &+ (value.hash << counter)
        counter = counter + 1
    }
    return Int(hash)
}

有关更多信息,请参阅苹果文档中的“溢出运算符”部分,网址为 https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/AdvancedOperators.html

现在甚至简化并使用 31 * old hash + newhash :

public class func hashValue(theObject: NSObject) -> Int {
    return Int(map(toDictionary(theObject)) {$1}.reduce(0) {(31 &* $0) &+ $1.hash})
}

关于ios - .hash 给出 EXC_BREAKPOINT (code=EXC_ARM_BREAKBOINT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28503610/

相关文章:

swift - 在NsView中,如何判断用户是否按住Shift键

c# - 如何使用反射动态实例化一个类型?

ios - 在 IOS 中构建一个使用 node.js 服务器的聊天应用程序

ios - 如何在 NSManagedObject iOS 上进行嵌套排序

objective-c - OS X 在后台打开 URL 方案

ios - 快速将渐变层推送到背景

c# - 您可以在运行时更改 Type 的 Name 属性的值吗?

Haskell:显示 Hlist 上所有 "showable"的元素

ios - 使用 Swift 从 UIImage 构建视频

ios - 将值传回 DetailViewController