Ошибка сообщения экземпляра в Objective-C, что это значит? И почему это происходит?

#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: