iOS7对此NSMutableCharacterSet算法的反应不同

时间:2013-09-26 01:41:40

标签: iphone ios objective-c ipad

我有这个基本的文本检查代码,直到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上失败?看起来像基本语言功能。

2 个答案:

答案 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];