2

我有这个基本的文本检查代码,在 iOS 7 之前一直运行良好:

   NSMutableCharacterSet*testchars=[NSCharacterSet alphanumericCharacterSet];
  [testchars addCharactersInString:@".-"];

  BOOL didFindBadCharacters = ([userInput rangeOfCharacterFromSet:[testchars invertedSet]].location != NSNotFound);

这里的简单想法是检查用户的输入,如果用户输入的任何字符不是字母数字或包含点或破折号userInput,则找到一个 BOOL 。也就是说,这些条目很好,但是空格或符号就不行了。true

直到 iOS 7,这才有效。我不明白为什么这与 iOS 7 不同,但现在如果用户输入点或破折号,BOOLtrue会在我登录时返回,以确保没有其他字符(例如空格)触发而是错误。

为什么这会在 iOS 7 上失败?似乎是基本的语言功能。

4

2 回答 2

7

为什么这会在 iOS 7 上失败?

对于 iOS 7 中为什么这会有所不同,我唯一的猜测是他们修复了一个错误:在 iOS 7 之前,可可曾经为内置字符集返回一个可变字符集。

文档没有说NSCharacterSet返回的 fromalphanumericCharacterSet应该是可变的,所以第一行的赋值是无效的,即使编译器没有抱怨。

这应该可以解决问题:

NSMutableCharacterSet*testchars = [[NSCharacterSet alphanumericCharacterSet] mutableCopy];
于 2013-09-26T01:54:22.600 回答
0

我不确定您的代码的第一行是否符合您的想法。它可能将一个NSCharacterSet对象分配给testchars(即一个非可变集)。结果,第二行可能什么都不做。尝试将您testchars的正确初始化NSMutableCharacterSet,我敢打赌您的代码会起作用。

正如@dasblinkenlight 正确建议的那样,这应该可以解决问题:

NSMutableCharacterSet *testchars = [[NSCharacterSet alphanumericCharacterSet] mutableCopy];
于 2013-09-26T01:52:19.293 回答