2013-03-13 4 views
2

У меня есть uitextfield, когда оно инициализировано, и я не вводил никаких значений в него, я обнаружил, что значение поля uitext не равно null или nil.UItextfield инициализируется пустой строкой? не ноль? ни ноль?

NSString *notes = (notesField.text)?(notesField.text):@"hello"; 
    NSLog(@"notes: %@",notes); 

она ничего не возвращает для заметок

NSString *notes1; 

//or use legnth 

    if ([notesField.text isEqual:@""]) { 
    [email protected]"hello"; 
     NSLog(@"empty textfield: %@",notes1); 
     //then it returns "hello" 
    } 
    else 
    { 
     notes1=notesField.text; 
     NSLog(@"not empty textfield: %@",notes1); 
    } 

Почему? Могу ли я использовать тернарный оператор? вот так?

NSString *notes = ([notesField.text length])?(notesField.text):@"hello"; 
+0

Смотрите мой отредактированный ответ, надеюсь, что будет иметь смысл –

ответ

3

Вы можете использовать

NSString *notes = ([notesField.text length])?(notesField.text):@"hello"; 

ИЛИ

NSString *notes = ([notesField.text length]==0)[email protected]"hello":(notesField.text); 

ИЛИ

NSString *notes = ([notesField.text isEqualToString:@""])[email protected]"hello":(notesField.text); 

И в случае, когда ваш UITextField не имеет вход (начальный случай), используйте второй или третий вариант, tha t будет beter. NSString *notes = ([notesField.text length])[email protected]"hello":(notesField.text); не будет работать так, как вы ожидаете, потому что notesField.text будет TRUE, даже если в текстовом поле нет текста. Поэтому вы должны использовать notesField.text.length или [notesField.text isEqualToString:@""].

Надеюсь, теперь это ясно.

+0

не должен первым быть один: NSString * замечания = ([notesField.text длина]) (notesField.text): @» Здравствуйте"; Когда я запустил это, он вернет мне привет. – Kiddo

+0

Да, конечно, плохо, не проверял контент, просто чтобы показать вам все возможные варианты, см. Мой отредактированный ответ, и если это поможет вам, пожалуйста, отметьте его как принятый. Спасибо –

-2

Этот подход будет работать нормально.

Что касается того, почему это пустая строка вместо нуля, обычно это неправильная практика возвращать нуль для чего-то, если вы не хотите указывать ошибку или неинициализированное состояние. Пустое текстовое поле имеет значение. Это просто пустая строка.

+0

Не всегда так и на самом деле документы для [UITextField] (http://developer.apple.com/library/ios/documentation/uikit/reference/UITextField_Class/Reference/UITextField.html#//apple_ref/doc/uid/TP40006888-CH3-SW2) утверждают, что значение по умолчанию равно 'nil' –

+0

Также обратите внимание, что пользователь может ввести кучу пробелов, что сделает длину строки отличной от нуля, но при этом не будет иметь никакого полезного текста. Вы должны обрезать строку перед использованием, используя ее длину. – Jeepston

+0

А, так они и делают. Я пропустил это. Меня учили избегать nil/null в таких случаях. Может быть, я просто старомодный. –

0

UITextField должен инициализировать себя пустой нитью. В ситуациях, когда вы не заботитесь, если строка пуста или отсутствует, вы можете просто проверить length свойство:

if (!notesField.text.length) { 
    // text is nil or empty 
} 

Или используя тройной оператор:

NSString *s = notesField.text.length ? notesField.text : @"Default"; 

Это работает, потому что отправка -length селектор до нулевого объекта будет возвращать значение по умолчанию 0.

3

Документов для UITextField состояния

текст

Текст, отображаемый текстовым полем.

@property (неатомической, копия) NSString * Текст

Обсуждение
Эта строка @ "" по умолчанию.


Примечание: если компиляция под Xcode 5.02 или 5.1 и работает в iOS раньше, чем iOS7, UITextField.text инициализируется нулем. Если он запущен в iOS7 +, он инициализируется символом @ "".

При компиляции в Xcode 4.6.3 или более ранних версиях UITextField.text (всегда) инициализировался на @ "" в соответствии с документацией.

Radar ошибка: 16336863

+0

- это ошибка xcode? – neobie