Objective-C как проверить, является ли строка нулевой

SO Я хочу проверить, есть ли элемент в моем массиве [clientDataArray objectForKey:@"ClientCompany"] nil.

    temp = [clientDataArray objectForKey:@"ClientCompany"];
    if (temp != [NSNull null]) infofieldCompany.text = temp;

До сих пор я смог достичь этого с помощью вышеуказанного кода, но он дает мне предупреждения

  • предупреждение: NSArray может не отвечать на -objectForKey:
  • предупреждение: сравнение отдельных Objective-C типы struct NSNull * и struct NSString * отсутствует литье

Мой главный интерес - второе предупреждение, но первое предупреждение также интересует меня. Как мне адаптировать мой выше код?

Ответ 1

Ваше первое предупреждение похоже на то, что вы пытаетесь вызвать objectForKey на NSArray. Что не будет работать, поскольку NSArray не имеет метода objectForKey.

Что касается второго предупреждения, вы можете просто сравнить напрямую с nil, то есть:

if (temp != nil)

или поскольку nil эквивалентен 0, вы также можете просто сделать:

if (temp)

Ответ 2

После использования всех параметров, я думаю, что это лучший вариант для comapre NSString null

if ( temp != ( NSString *) [ NSNull null ] )
{
  // do some thing
}

Ответ 3

Оба ответа, которые были даны ранее, пропустили фундаментальную точку: вы не можете поместить nil в массив, так что вы никогда не получите nil из массива. Использование NSNull в качестве заполнителя в массиве - это правильная вещь,, но ваша переменная temp не может быть объявлена ​​как NSString *, поскольку она может быть не такой. Используйте либо NSObject *, либо id как тип переменной, чтобы подавить предупреждение сравнения.

Ответ 4

Лучшее решение для проверки значений NULL или Empty:

if (yourObj.yourString == (NSString*) [NSNull null] || yourObj.yourString.length == 0 )
{
   yourObj.yourString = @"";
}

Ответ 5

Тихая простая

if (myString == nil){
     NSLog(@"myString is null");
}

Ответ 6

Я думаю, что проблема (я имею в виду второе предупреждение) заключается в том, что вы сравниваете объект NSString, который может быть установлен в null для объекта NSNull.

Вы пробовали обычную C-проверку для null?

if(temp) {
// It not null, do something.
}

Я не уверен на 100% об этом, но вы можете попробовать. Если вы это сделали, извините, что не могли предоставить более полезную информацию.

Удачи!

Ответ 7

Синтаксис NSNull может использоваться для построения "чередующихся" массивов, таких как obj0, obj1, obj2, NSNull, obj3, NSNull,..., nil.

предупреждение: "NSArray" может не отвечать to'-objectForKey:

NSArray не реализует objectForKey.
Ваш код выйдет из строя во время выполнения (если clientDataArray был выделен и инициализирован) Вы можете получить доступ к элементам массива по индексу (objectAtIndex:).
Если вам нужно связать объекты с ключами, посмотрите NSDictionary.

Ответ 8

if (temp!= nil)

или поскольку nil эквивалентен 0, вы также можете просто сделать:

if (temp)

Я не в какой-либо степени воображения эксперт Obj-C или Cocoa, в C/С++ вы можете использовать что-то вроде:

if (somePtr!= NULL)

И если вы явно не указали его в NULL или не изменили то, на что он указывал, вы можете быть уверены, что это, по сути, Not Null или Null (что бы вы ни искали...)

Но я заметил (мой личный опыт), что в Obj-C,

Если вы сделаете что-то вроде: если (someObj!= nil) или обратное,

Там нет гарантии, он скажет вам, что это РЕАЛЬНЫЙ статус...

Итак, после того, как я столкнулся с кучей сбоев, когда я занимаюсь Obj-C (BS), чтобы быть в безопасности, у меня всегда есть BOOL или флаг, настроенный для отслеживания его статуса, так что вы не закончите Free -извините, извините меня... "Освобождение" того, что уже было освобождено...

Ответ 9

Даже если этот вопрос старый, я надеюсь, что мой ответ поможет кому-то другому.

Вы можете попробовать это

temp = [clientDataArray objectForKey:@"ClientCompany"];
if (![temp isKindOfClass:[NSNull class]]) infofieldCompany.text = temp;