Проверка на пустую строку NSString на ViewDidLoad? - PullRequest
1 голос
/ 01 апреля 2012

Мое приложение проверяет, является ли строка NSString пустой при запуске, например:

if ([checkfieldstring1 isEqualToString:@""]) {

    checkboxButton.hidden = YES;
}
else {

    checkboxbutton.hidden = NO;
}

Однако, когда есть пустая строка, кнопка не скрывается.Я знаю, что этот метод работает, когда я подключаю его как IBAction к кнопке, но не к ViewDidLoad ...

Ответы [ 4 ]

5 голосов
/ 01 апреля 2012

При проверке пустой строки, когда представление собирается загружаться, необходимо проверить наличие нулевой строки или пустой строки, поскольку строка, возможно, еще не настроена.

if (checkfieldstring1 == nil || [checkfieldstring1 length] == 0) {
    checkboxButton.hidden = YES;
} else {
    checkboxButton.hidden = NO;
}

Или, если выделайте так, как я, и используйте это в наборе общих макросов, которые я добавляю в проект:

static inline BOOL isEmpty(id thing)) {
    return thing == nil
        || ([thing respondsToSelector:@selector(length)]
        && [(NSData *)thing length] == 0)
        || ([thing respondsToSelector:@selector(count)]
        && [(NSArray *)thing count] == 0);
}

Предоставлено Wil Shipley http://www.wilshipley.com/blog/2005/10/pimp-my-code-interlude-free-code.html

, вы можете просто проверить с помощью:

if(isEmpty(checkfieldstring1) {
    checkboxButton.hidden = YES;
} else {
    checkboxButton.hidden = NO;
}
3 голосов
/ 01 апреля 2012

Поскольку checkfieldstring1 может быть nil или пусто (""), необходимо проверить оба случая.

Самый простой способ проверить оба, поскольку Objective-C просто возвращает 0, когда вы отправляете сообщение объекту nil, - это использовать метод длины, например так:

if ([checkfieldstring1 length] == 0) {
    checkboxButton.hidden = YES;
}
else {
    checkboxbutton.hidden = NO;
}

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

checkboxButton.hidden = [checkfieldstring1 length] == 0;

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

1 голос
/ 22 апреля 2012

Не могу поверить, что я был настолько глуп ... Для дальнейшего использования, в моем ViewDidLoad я устанавливал текст текстового поля из UserDefaults.Я проверял наличие пустой строки ДО того, как текст был задан, поэтому каждый раз он показывался пустым.Теперь я установил код после настройки текстового поля, и он работает как шарм.

0 голосов
/ 01 апреля 2012

Я думаю, что это может помочь вам попробовать -

if(checkfieldstring1 == [NSNull null] || [checkfieldstring1 length] == 0) {
// do something
}
...