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

Последняя строка приводит к сбою приложения с плохим доступом. Имеет ли это какое-то отношение к символу адреса, &? Я не понимаю, зачем ему нужен этот тип синтаксиса.NSScanner scanUpToCharactersFromSet дает БЕСПЛАТНЫЙ ДОСТУП

Я пытаюсь просто проверить с помощью BOOL, если 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

Вы можете использовать 'setCharactersToBeSkipped:' 'NSScanner''. Установите это свойство в алфавитно-цифровой набор символов. – Mundi