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。
答案 0 :(得分:0)
原来在Swift 1.2b1中的String.uppercaseString中存在一个错误:https://devforums.apple.com/message/1102105#1102105
使用newstring.memory = partialString
它不会崩溃。