【问题标题】:NSScanner scanUpToCharactersFromSet gives BAD ACCESSNSScanner scanUpToCharactersFromSet 给出了 BAD ACCESS
【发布时间】:2012-05-30 12:58:53
【问题描述】:
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

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

【问题讨论】:

    标签: iphone objective-c ipad nsscanner


    【解决方案1】:

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

        NSScanner *scan =[NSScanner scannerWithString:mystring];
    

    【讨论】:

      【解决方案2】:

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

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

      NSCharacterSet *nonAlphanumeric = [[NSCharacterSet alphanumericCharacterSet] invertedSet];
      pass = ([test rangeOfCharacterFromSet:nonAlphanumeric].location != NSNotFound);
      

      【讨论】:

        【解决方案3】:

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

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

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

        【讨论】:

        • 不,结果应该是YES。字符串“Hello”中有个字母数字字符。
        • 你在我删除之前读过,对不起;我用我的真正目标更新了我的问题。请注意,我正在扫描反转集,因此寻找非字母数字。
        • 你可以使用NSScannersetCharactersToBeSkipped:。将此属性设置为字母数字字符集。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-14
        • 1970-01-01
        • 2017-08-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多