我有这个基本的文本检查代码,直到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上失败?看起来像基本语言功能。
答案 0 :(得分:7)
为什么这会在iOS 7上失败?
我唯一的猜测是为什么在iOS 7中会有所不同是因为他们修复了一个错误:在iOS 7之前,cocoa用于返回内置字符集的可变字符集。
文档没有说明NSCharacterSet
返回的alphanumericCharacterSet
应该是可变的,因此即使编译器没有抱怨,第一行的赋值也是无效的。
这应解决问题:
NSMutableCharacterSet*testchars = [[NSCharacterSet alphanumericCharacterSet] mutableCopy];
答案 1 :(得分:0)
我不确定代码的第一行是否符合您的想法。它可能会将NSCharacterSet
对象分配给testchars
(即非可变集)。结果,第二行可能什么都不做。尝试将testchars
作为正确的NSMutableCharacterSet
发起,我打赌你的代码会正常工作。
正如@dasblinkenlight正确建议的那样,这应该可以解决问题:
NSMutableCharacterSet *testchars = [[NSCharacterSet alphanumericCharacterSet] mutableCopy];