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

最後の行は、アクセスの悪いアプリをクラッシュさせます。アドレス記号と関係があります&か? とにかく、このタイプの構文が必要な理由は明確ではありません。

inputString英数字以外の文字が含まれているかどうかを BOOL で確認しようとしています。あればpassYESになります。

更新: スキャナーを完全には理解していないようです。私はこの出力を理解しています:

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 に答える