iOS не может проверить, является ли объект нулевым - PullRequest
6 голосов
/ 28 ноября 2011

Итак, у меня есть следующий код:

- (IBAction)doSomething
{
if (txtName.text != (id)[NSNull null] || txtName.text.length != 0 ) {
    NSString *msg = [[NSString alloc] initWithFormat:@"Hello, %@", txtName.text];
    [lblMessage setText:msg];
}

}

txtName это UITextField, что я делаю не так? Я пытаюсь отобразить текст только тогда, когда пользователь что-то печатает в поле.

С наилучшими пожеланиями,

Ответы [ 6 ]

11 голосов
/ 28 ноября 2011

Текст в текстовом поле является экземпляром NSString или значением nil, он никогда не равен экземпляру класса NSNull (который не равен nil ).Так как 1-е сравнение всегда истинно, тогда все условие if оценивается как true, и появляется сообщение.

Вы можете исправить свое условие if на

if (txtName.text != nil && txtName.text.length != 0 )

или, отправив сообщение длины вnil в любом случае вернет 0, просто наберите

if (txtName.text.length != 0 )

, хотя я обычно использую 1-й вариант с двумя сравнениями

6 голосов
/ 28 ноября 2011

if (txtName.text != (id)[NSNull null] || txtName.text.length != 0 ) {

Прочитайте как «Если текст нулевой или длина не равна 0»

txtName.text никогда не бывает nil (кстати, вы можете просто сравнить с nil для пустой проверки) - текстовое поле всегда содержит некоторый текст, даже если он пустой. Таким образом, первый дизъюнкт всегда верен, и поле всегда будет отображаться.

3 голосов
/ 12 декабря 2013

У меня такая же проблема, как и у вас.Эта проблема относится к классу NSNull.И вот мой код, чтобы проверить, что объект нулевой.

    NSString* text;
    if([text isKindOfClass:[NSNull class]])
    {
           //do something here if that object is null
    }

Надеюсь, что это может помочь.

1 голос
/ 27 января 2015
#define SAFESTRING(str) ISVALIDSTRING(str) ? str : @""
#define ISVALIDSTRING(str) (str != nil && [str isKindOfClass:[NSNull class]] == NO)
#define VALIDSTRING_PREDICATE [NSPredicate predicateWithBlock:^(id evaluatedObject, NSDictionary *bindings) {return (BOOL)ISVALIDSTRING(evaluatedObject);}]
SAFESTRING(PASS_OBJECT OR STRING);
0 голосов
/ 18 мая 2017

Пожалуйста, попробуйте это:

, когда значение myObj равно ноль или <ноль>

if([myObj isEqual:[NSNull class]] || !myObj) {

// your code

}
0 голосов
/ 28 ноября 2011

Решение найдено!![txtName.text isEqualToString:@""]

- (IBAction)doSomething
{
if (![txtName.text isEqualToString:@""]){
    NSString *msg = [[NSString alloc] initWithFormat:@"Hello, %@", txtName.text];
    [lblMessage setText:msg];    

}

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...