我有这个基本的文本检查代码,在 iOS 7 之前一直运行良好:
NSMutableCharacterSet*testchars=[NSCharacterSet alphanumericCharacterSet];
[testchars addCharactersInString:@".-"];
BOOL didFindBadCharacters = ([userInput rangeOfCharacterFromSet:[testchars invertedSet]].location != NSNotFound);
这里的简单想法是检查用户的输入,即 userInput
,如果用户输入的任何字符不是,则找到一个 true
的 BOOL 字母数字或包含点或破折号。也就是说,这些条目可以,但空格或符号则不行。
在 iOS 7 之前,这是有效的。我不明白为什么这会与 iOS 7 不同,但现在如果用户输入一个点或破折号,BOOL 在我登录时返回 true
以确保没有其他字符,例如空格,而是触发错误。
为什么这在 iOS 7 上会失败?看起来像基本的语言功能。
最佳答案
Why would this fail on iOS 7?
关于为什么这在 iOS 7 中会有所不同,我唯一的猜测是他们修复了一个错误:在 iOS 7 之前, cocoa 用于为内置字符集返回一个可变字符集。
文档没有说从 alphanumericCharacterSet
返回的 NSCharacterSet
应该是可变的,所以第一行的赋值是无效的,即使编译器没有报错。
这应该可以解决问题:
NSMutableCharacterSet*testchars = [[NSCharacterSet alphanumericCharacterSet] mutableCopy];
关于iphone - iOS7 对此 NSMutableCharacterSet 算法的 react 不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19017965/