alertView textFieldAtIndex nil, тогда условие if все равно проходит - PullRequest
1 голос
/ 02 февраля 2012

У меня короткий вопрос: кто-то хочет +15 респ. : D

//This returns nothing, nil, or "" (no quotes)
NSLog(@"alert view text field : %@",[alertView textFieldAtIndex:0].text);

//In theory this if-condition should NOT pass
if([alertView textFieldAtIndex:0].text != nil || [alertView textFieldAtIndex:0].text != @"")
{
    NSLog(@"IF!");
}
//in other words, "else" should run
else {
    NSLog(@"ELSE");
}

Вместо этого я получаю это как вывод:

[29929: fb03] текстовое поле просмотра предупреждений:

[29929: fb03] IF!

EIDT: ладно, ответив на вопросы, я вставил

if(!([[alertView textFieldAtIndex:0].text isEqualToString:@""]) || !([[alertView textFieldAtIndex:0].text isEqualToString: nil]) || !([alertView textFieldAtIndex:0].text != nil))

но если все еще проходит, и это не должно быть. Я не понимаю (

Ответы [ 5 ]

0 голосов
/ 02 февраля 2012

Это ваша проблема здесь

[alertView textFieldAtIndex:0].text != nil

Вы сравниваете строку NSString с нулем. Подумайте об этом, что вы пытаетесь сравнить? Вы пытаетесь увидеть, содержит ли NSString пустую строковую ссылку, так что @ ""? или вы пытаетесь увидеть, указывает ли объект NSString на ноль.

Вы можете увидеть это здесь:

NSString *test = @"something in here";
if (test == nil) {
    NSLog(@"String pointer is nil");
}
else
    // It will pass here
    NSLog(@"String pointer is not nill");

Таким образом, в вашем случае выше условие если проходит, потому что указатель на этот объект не ноль Это на самом деле существует.

0 голосов
/ 02 февраля 2012

Всегда используйте метод isEqualToString для сравнения строк

! ([AlertView textFieldAtIndex: 0] .text isEqualToString: @ ""])

0 голосов
/ 02 февраля 2012

Сравните NSStrings в Objective-C, используя isEqualToString компаратор, например, -

if(![[alertView textFieldAtIndex:0].text isEqualToString:@""]) NSLog(@"IF!");

0 голосов
/ 02 февраля 2012

Измените свой оператор на && вместо ||:

//This returns nothing, nil, or "" (no quotes)
NSLog(@"alert view text field : %@",[alertView textFieldAtIndex:0].text);

//In theory this if-condition should NOT pass
if([alertView textFieldAtIndex:0].text != nil && [alertView textFieldAtIndex:0].text != @"")
{
    NSLog(@"IF!");
}
//in other words, "else" should run
else {
    NSLog(@"ELSE");
}
0 голосов
/ 02 февраля 2012

Нельзя сравнивать строки с ==.Если вы делаете это, вы сравниваете указатели двух строковых экземпляров, что вряд ли будет тем, что вы хотите.Вместо этого попробуйте:

if([alertView textFieldAtIndex:0].text != nil ||
   ![[alertView textFieldAtIndex:0].text isEqualToString:@""])
{
  ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...