2012-05-30 58 views
0
NSString*test=[NSString stringWithString:inputString]; 
NSScanner*scan; 
BOOL pass= [scan scanUpToCharactersFromSet:[[NSCharacterSet alphanumericCharacterSet] invertedSet] intoString:&test]; 

最後一行使應用程序崩潰而導致訪問不良。它與地址符號&有什麼關係?無論如何,我不清楚爲什麼它需要這種類型的語法。NSScanner scanUpToCharactersFromSet給出BAD ACCESS

我想簡單地檢查我的布爾如果inputString包含任何非字母數字字符。如果是,則pass變爲是。

更新:我看到我完全不理解掃描儀。我明白這樣的輸出:

NSString*[email protected]"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

我想是知道其實測試字符串包含非字母數字字符。我將如何考慮這樣的測試?

回答

1

我想知道的是,實際上測試字符串是否包含 非字母數字字符。我將如何考慮這樣的測試?

如果這是您唯一的目標,則不需要使用NSScanner。你可以簡單地使用NSString的-rangeOfCharacterFromSet:方法:

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

你應該以字符串解析初始化掃描儀,

NSScanner *scan =[NSScanner scannerWithString:mystring]; 
1

你是混合了目標字符串和源字符串。您的來源是test。此外,您的掃描儀未初始化。

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

發生EXC_BAD_ACCESS錯誤是因爲您正在向不存在的對象發送消息。

+0

不,結果應該是'YES'。 **字符串中有**字母數字字符「Hello」。 – Mundi

+0

你之前讀過我刪除,對不起;我用我的真正目標更新了我的問題。請注意,我正在掃描倒置集合,因此查找非字母數字。 – johnbakers

+0

你可以使用'NSScanner'的'setCharactersToBeSkipped:'。將此屬性設置爲字母數字字符集。 – Mundi

相關問題