我刚刚转到XCode 4,从Mac OS 10.5 SDK转移到10.6 SDK。改变的行为是,使用NSNumberFormatter将无效文本输入NSTextField会导致整个字段的内容被删除,而不是禁止添加虚假字符。
在我的例子中,我有一个NSNumberFormatter,最小值为1,最大值为10000000,isLenient,并且本地化。输入一个像“123”的值,没关系。键入字母“x”,整个值将被删除。
访问字段的stringValue或intValue时会发生擦除。
文本字段和数字格式化程序在XIB文件中定义。我希望防止无效输入或者最好容忍和忽略,但是擦除整个值真的不行。
另一个奇怪的事情是,当输入大于10,000的值时,整个值将被删除。 - [controlTextDidChange]中的字符串值为“10,0000”,并在评估后立即更改为空字符串。
更新: 这是在cocoa-dev上提出的:
试试这个:子类NSNumberFormatter,并实现isPartialStringValid:proposedSelectedRange:originalString:originalSelectedRange:errorDescription :( preferred)或isPartialStringValid:newEditingString:errorDescription:。您可能必须setPartialStringValidationEnabled:YES。