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;