У меня было это в моем try-catch-finally, и он компилирует хорошо.
@catch (NSException *e) {
.....
}
... но когда я пытался поймать NSRangeException: Я получил ошибку.
@catch (NSRangeException *ne) {
.....
}
Ошибка:
Expected declaration specifiers: NSRangeExpection
(TechZen заявляет - это, по-видимому, опечатка для:)
Expected declaration specifiers: NSRangeException
Я сделал позже для импорта "Funcation/NSException.h", но он не удалил ошибку.
Эта ошибка может быть вызвана ошибками вложенности в коде, предшествующем строке. Возможно, это не имеет ничего общего с самой линией. Проверьте и / или разместите код над строкой, в которой возникает ошибка.
Если сообщение об ошибке, которое вы отправили, является фактическим сообщением, которое вы получили обратно, то вы допустили простую опечатку, написав NSRangeExpected для NSRangeException.
Хорошо, взглянув еще раз, ответ прост, и я его просто пропустил. NSException
- это класс, но NSRangeException
- это имя, определенное в строковой константе:
extern NSString *NSRangeException;
... которая просто возвращает строку «NSRangeException».
Очевидно, @catch
ожидает получения объекта NSException
, но вместо этого получает объект NSString.
Вы можете настроить @catch
для приема такой строки:
@catch(NSString *stringException){...
или
@catch(id idException){...
... но обычно нет причин для этого.
Вы используете NSRangeException и другие имена исключений для проверки имени
экземпляра NSException
, который перехватывает @catch
.