Как я могу проверить NSString на отсутствие нуля? - PullRequest
4 голосов
/ 27 января 2009

Могу ли я просто использовать

if(myString == nil)

По какой-то причине строка, которую я знаю, имеет значение null, не соответствует этому выражению.

Ответы [ 8 ]

28 голосов
/ 27 января 2009

Возможно ли, что ваша строка на самом деле не nil, а вместо этого просто пустая строка? Вы можете попробовать проверить, является ли [myString length] == 0.

16 голосов
/ 05 ноября 2011

Вы можете найти больше о целевой строке C здесь.

+ (BOOL ) stringIsEmpty:(NSString *) aString {

    if ((NSNull *) aString == [NSNull null]) {
        return YES;
    }

    if (aString == nil) {
        return YES;
    } else if ([aString length] == 0) {
        return YES;
    } else {
        aString = [aString stringByTrimmingCharactersInSet: [NSCharacterSet whitespaceAndNewlineCharacterSet]];
        if ([aString length] == 0) {
            return YES;
        }
    }

    return NO;  
}

+ (BOOL ) stringIsEmpty:(NSString *) aString shouldCleanWhiteSpace:(BOOL)cleanWhileSpace {

    if ((NSNull *) aString == [NSNull null]) {
        return YES;
    }

    if (aString == nil) {
        return YES;
    } else if ([aString length] == 0) {
        return YES;
    } 

    if (cleanWhileSpace) {
        aString = [aString stringByTrimmingCharactersInSet: [NSCharacterSet whitespaceAndNewlineCharacterSet]];
        if ([aString length] == 0) {
            return YES;
        }
    }

    return NO;  
}
7 голосов
/ 27 марта 2012

вы можете проверить полученную строку, используя

   if(myString==(id) [NSNull null] || [myString length]==0 || [myString isEqualToString:@""])
    {
     //String is null or bad response
    }
3 голосов
/ 10 января 2011

Примечание длина = 0 не обязательно означает, что это ноль

NSString *test1 = @"";
NSString *test2 = nil;

Они не одинаковы. Хотя обе длины равны 0.

3 голосов
/ 27 января 2009

Кажется, что моя строка в отладчике сообщала как (ноль), но это было связано с тем, как она была назначена, я исправил ее, и теперь она сообщает как ноль. Это исправило мою проблему.

Спасибо!

2 голосов
/ 23 апреля 2018

Вы можете неявно проверить для nil (выделено, но не инициализировано) с помощью этого:

if (!myString) { 
    //do something
}

Если myString было назначено из словаря или массива, вы можете также проверить наличие NSNULL следующим образом:

if ([myString isEqual:[NSNull null]]) {
    //do something
}

Наконец (как упоминала Софи Альперт), вы можете проверить наличие пустых строк (пустое значение):

if ([myString length] == 0) {
    //do something
}

Часто вы можете захотеть объединить выражения:

if (!myString || [myString length] == 0) {
    //do something
}
0 голосов
/ 29 ноября 2018

Проверьте, что NSAttributedString пусто:

let isEmpty = atrributedString.string.isEmpty
0 голосов
/ 22 ноября 2014

Я столкнулся с этой проблемой сегодня. Несмотря на назначение строки равной nil: NSString *str = nil;, тест if (str == nil) вернул FALSE! Однако изменение теста на if (!str) сработало.

...