Как предотвратить предупреждение о сборке: «NSData может не отвечать на« dataWithBase64EncodedString: »» - PullRequest
0 голосов
/ 11 февраля 2010

Следующий код выдает это предупреждение о сборке:

NSData может не отвечать на 'DataWithBase64EncodedString:'

Код:

NSString * message = @"string string string";

NSData *data= [NSData  dataWithBase64EncodedString:(NSString *)message];

Как мне исправить это, чтобы удалить это предупреждение?

Ответы [ 3 ]

5 голосов
/ 11 февраля 2010

Удаление предупреждения - это наименьшее из ваших беспокойств - NSData не отвечает на этот метод, и этот код вылетает, если вы его запустите!

См. документы здесь для доступных методов по умолчанию для NSData.

Однако, вы, вероятно, ищете эту страницу , которая имеет реализацию dataWithBase64EncodedString в категории (см. Самый последний пост в теме!)

4 голосов
/ 11 февраля 2010

NSData не имеет dataWithBase64EncodedString: метода. Если вы используете некоторую пользовательскую категорию NSData с этим методом, вы должны импортировать заголовок, где он определен.

Редактировать: Так что, если вы используете код из этой ссылки , вы можете просто создать свои собственные файлы .h и .m и скопировать в них этот код:

// MBBase64.h 
@interface NSData (MBBase64)
    + (id)dataWithBase64EncodedString:(NSString *)string;     //  Padding '=' characters are optional. Whitespace is ignored.
    - (NSString *)base64Encoding;
@end

//MBBase64.m
static const char encodingTable[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";

@implementation NSData (MBBase64)
...
@end

И затем импортируйте заголовок MBBase64.h везде, где вы хотите использовать +dataWithBase64EncodedString: метод.

3 голосов
/ 11 февраля 2010

Просто чтобы уточнить предыдущие ответы:

В API NSFoundation NSData не имеет метода dataWithBase64EncodedString:. Если ваш код копирования в котором он делает, то этот код расширил NSData, добавив к нему категорию , которая содержит метод.

Вы можете добавлять произвольные методы в любой класс, используя категорию. Если кто-то использовал категорию в своем примере кода, вы не можете использовать этот код, если вы также не получите заголовок и файлы реализации, которые определяют категорию. Если первоначальный автор не сделал их доступными, вам не повезло.

Кодировка Base64 не является API-кодированием для строк, поэтому вам, вероятно, придется реализовать это самостоятельно или найти какой-то код у кого-то, кто имеет.

...