NSString*test=[NSString stringWithString:inputString];
NSScanner*scan;
BOOL pass= [scan scanUpToCharactersFromSet:[[NSCharacterSet alphanumericCharacterSet] invertedSet] intoString:&test];
最后一行崩溃了访问权限不佳的应用。它与地址符号&
有关吗?我不清楚它为什么需要这种类型的语法。
如果inputString
包含任何非字母数字字符,我只想检查我的BOOL。如果是,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
我想知道的是,实际上测试字符串是否包含非字母数字字符。我如何将这样的测试纳入考虑范围?
答案 0 :(得分:2)
您应该使用要解析的字符串初始化扫描仪,
NSScanner *scan =[NSScanner scannerWithString:mystring];
答案 1 :(得分:1)
您正在混合目标字符串和源字符串。您的来源是test
。此外,您的扫描仪未初始化。
NSScanner *scan = [NSScanner scannerWithString:test];
BOOL didScanCharacters = [scan scanUpToCharactersFromSet:
[[NSCharacterSet alphanumericCharacterSet] invertedSet]
intoString:nil];
发生EXC_BAD_ACCESS错误是因为您正在向不存在的对象发送消息。
答案 2 :(得分:1)
我想知道的是,实际上测试字符串是否包含 非字母数字字符。我如何将这样的测试纳入考虑范围?
如果这是您唯一的目标,则无需使用NSScanner。您只需使用NSString的-rangeOfCharacterFromSet:
方法:
NSCharacterSet *nonAlphanumeric = [[NSCharacterSet alphanumericCharacterSet] invertedSet];
pass = ([test rangeOfCharacterFromSet:nonAlphanumeric].location != NSNotFound);