#objective-c #error-handling #aes #nsdata
#objective-c #обработка ошибок #aes #nsdata
Вопрос:
Я получаю приведенную ниже ошибку без видимой причины, я бы попытался исправить это сам, но я не могу понять, что это значит. Кто-нибудь еще это понимает? Вот ошибка, а под ней код.
Ошибка: тип получателя ‘NSData’ для экземпляра message не объявляет метод с типом селектора ‘EncryptAES:’
Я добавил комментарий к строке с ошибкой:
//Change the Input String to Data
NSData *objNSData = [NSData dataWithData:[Input dataUsingEncoding: NSUTF8StringEncoding]];
//Encrypt the Data
[objNSData EncryptAES:Keyword.text]; //Error appears here
NSString *InputString = [[NSString alloc] initWithData:objNSData encoding:NSUTF8StringEncoding];
Что это значит, почему это происходит и что я могу сделать, чтобы это исправить?
И что такое сообщение экземпляра?
Ответ №1:
Проблема здесь в том, что NSData
не реагирует на EncryptAES:
селектор. Вы можете вызывать только селекторы, которые существуют в классе. При свободной типизации среды выполнения Objective-C вы также можете вызвать селектор для класса, который не отвечает на указанный селектор, при условии, что селектор появляется в реализации по крайней мере одного другого класса, с которым работает компилятор.
Все стандартные NSData
методы можно найти в ссылке на класс NSData . У Apple есть пример кода для шифрования, но он не встроен NSData
.
Комментарии:
1. Так что мне придется переписывать этот код? Или есть способ в CommonCrypto выполнить эту задачу?
2. Для этого вы можете использовать CommonCrypto.
3. Честно говоря, файлы, которые Apple имеет в CommonCrypto, меня смущают, я всего лишь новичок, так что это каменистая вода. НО я уже использую CommonCrypto. Если я импортировал его в начало файла, означает ли это, что я его использую? Я задавал вопросы, но ответы не ясны. Кажется, что этот код должен иметь смысл, но я думаю, что это не так с Xcode
4. CommonCrypto не добавляет
NSData
методы шифрования. Вам нужно будет скопировать некоторый пример кода онлайн или задать другой вопрос в stackoverflow. Этот вопрос направлен не на шифрование, а на среду выполнения Objective-C.5. Тогда что он шифрует? NSString? хмммм
Ответ №2:
Я предполагаю, что вы пытаетесь использовать «категорию» AESEncrypt для NSData, но на самом деле у вас нет категории, установленной в вашем проекте.
Комментарии:
1. Откуда вы взяли файл .h для AESEncrypt? Получите файл .m из того же источника.
2. Извините, я допустил опечатку, файла AESEncrypt не было, и ошибка должна была указывать EncryptAES: не AESEncrypt: