Правильная проверка столбца текста nil sqlite

У меня есть строковый столбец sqlite, который назначается строке. Мне нужно убедиться, что это не нуль перед назначением. Я делаю это:

char *isNil = sqlite3_column_text(selectstmt, 2);
if(isNil != nil){
  myName = [NSString stringWithUTF8String:(char *)sqlite3_column_text(selectstmt, 2)];}

который дает предупреждение:

предупреждение: инициализация отбрасывает квалификаторы из целевого типа указателя

Каков правильный способ сделать это?

Ответ 1

Вы получаете предупреждение, поскольку игнорируете const. API определен:

const unsigned char *sqlite3_column_text(sqlite3_stmt*, int iCol);

Вы назначаете возврат к char *, поэтому вы отбрасываете константу. Вот почему вы получаете предупреждение. Вы должны уважать const.

const unsigned char *isNil = ...

Я не очень большой парень objective-c, но я считаю стилистически обычной практикой сравнивать примитивные типы с NULL, а не с nil. Также нет необходимости дважды вызывать столбец.

const char *columnText = (const char *)sqlite3_column_text(selectstmt, 2);
if(columnText != NULL)
{
    myName = [NSString stringWithUTF8String: columnText ];
}

Вы можете видеть выше. Я применил указатель const unsigned char к указателю со знаком char. Вы должны убедиться, что знаете, когда отвергаете предупреждение о том, что это правильно. В этом случае безопасно передавать в подписанный char. В общем, никогда не отбрасывайте const, поскольку тот, кто сделал этот API, мог делать что-то, что требует от вас обработки данных как const.