0
NSString*test=[NSString stringWithString:inputString]; 
NSScanner*scan;
BOOL pass= [scan scanUpToCharactersFromSet:[[NSCharacterSet alphanumericCharacterSet] invertedSet] intoString:&test];

最后一行使应用程序因访问不当而崩溃。它与地址符号有关&吗?我不清楚为什么它需要这种类型的语法。

我试图简单地检查我的 BOOL 是否inputString包含任何非字母数字字符。如果是,pass则变为 YES。

更新:我看到我完全不了解扫描仪。我理解这个输出:

NSString*test=@"Hello"; // this should cause my BOOL to be NO since no characters are scanned
NSScanner*scanix=[NSScanner scannerWithString:test];
BOOL pass= [scanix scanUpToCharactersFromSet:[[NSCharacterSet alphanumericCharacterSet] invertedSet] intoString:nil];
NSLog(@"pass is %i for %@",pass, test);

日志中的结果:pass is 1 for Hello

我想知道实际上测试字符串是否包含非字母数字字符。我如何将这样的测试纳入其中?

4

3 回答 3

2

您应该使用要解析的字符串初始化扫描仪,

    NSScanner *scan =[NSScanner scannerWithString:mystring];
于 2012-05-30T13:03:19.507 回答
1

您正在混淆目标字符串和源字符串。您的来源是test. 此外,您的扫描仪未初始化。

NSScanner *scan = [NSScanner scannerWithString:test];
BOOL didScanCharacters = [scan scanUpToCharactersFromSet:
   [[NSCharacterSet alphanumericCharacterSet] invertedSet] 
   intoString:nil];

发生 EXC_BAD_ACCESS 错误是因为您正在向不存在的对象发送消息。

于 2012-05-30T13:08:20.070 回答
1

我想知道实际上测试字符串是否包含非字母数字字符。我如何将这样的测试纳入其中?

如果这是您的唯一目标,则无需使用 NSScanner。您可以简单地使用 NSString 的-rangeOfCharacterFromSet:方法:

NSCharacterSet *nonAlphanumeric = [[NSCharacterSet alphanumericCharacterSet] invertedSet];
pass = ([test rangeOfCharacterFromSet:nonAlphanumeric].location != NSNotFound);
于 2012-05-30T13:24:59.567 回答