在Swift的isPartialStringValid中设置newString

时间:2015-02-20 12:37:49

标签: swift

NSFormatter的isPartialStringValid:newEditingString:errorDescription:在Objective-C中有两个输出参数声明为NSString **,在Swift中声明为AutoreleasingUnsafeMutablePointer<NSString?>。我在NSFormatter子类中实现了以下格式化程序并将其附加到NSTextField:

override func isPartialStringValid(partialString: String, newEditingString newString: AutoreleasingUnsafeMutablePointer<NSString?>, errorDescription error: AutoreleasingUnsafeMutablePointer<NSString?>) -> Bool {
    if count(partialString) > count(hostnamePlaceholder) {
        return false
    } else if count(partialString) > 0 {
        let extendedString: String
        if count(partialString) < count(hostnamePlaceholder) {
            let substring = hostnamePlaceholder.substringFromIndex(advance(hostnamePlaceholder.startIndex, count(partialString)))
            extendedString = partialString + substring
        } else {
            extendedString = partialString
        }
        if hostnamePattern.numberOfMatchesInString(extendedString, options: NSMatchingOptions(0), range: NSMakeRange(0, count(hostnamePlaceholder))) != 1 {
            return false
        }
    }
    // As long as I don't try to set newString it works.
    //newString.memory = partialString.uppercaseString
    return true
}

它成功验证输入是否符合预期,不会让我输入无效字符。但是,我想强制大写输入,但是当我设置newString时,一旦方法返回,应用程序就会在objc_release中崩溃。我错过了什么?我正在使用Xcode 6.3 beta 1。

1 个答案:

答案 0 :(得分:0)

原来在Swift 1.2b1中的String.uppercaseString中存在一个错误:https://devforums.apple.com/message/1102105#1102105

使用newstring.memory = partialString它不会崩溃。