2014-12-10 2 views
-1

my favouriteMark массив имеет следующие объекты ((no),(no),(no)), но когда я попытался containsObject, он всегда возвращает NO.containsObject in ios всегда возвращает

if([favouriteMark containsObject:@"no"] == YES) 
{ 
NSLog(@"Success"); 
} 

Не входите, если состояние.

+2

Какие это объекты в массиве? Какой тип '(нет)'? Как вы создаете массив? – Fogmeister

+0

На самом деле у него есть объекты из базы данных. В журнале это было показано только ((нет), (нет)) –

+0

Да, но он все равно будет иметь тип. Это болван? строка? что-то другое? – Fogmeister

ответ

1

ОК, ваш массив является массивом массивы и каждый массив содержит строку (очень случайную).

Во всяком случае, вы можете изменить свой код, как это ...

if([favouriteMark containsObject:@[@"no"]]) // don't need to have == YES 
{ 
    // it contains @[@"no"] 
    NSLog(@"Success"); 
} 
+0

Большое спасибо .. Его работая как шарм. Могу ли я иметь идентификатор почты по почте, facebook id, twitter. whatsapp –

+0

@Balaji Рад, что он работает. Вы можете найти мои данные на моей странице профиля. – Fogmeister

+0

ok .. thank u so much .. –

1

Это работает propertly:

NSArray *noArray = @[@"no",@"no",@"no"]; 
if ([noArray containsObject:@"no"]) 
{ 
    NSLog(@"No array contains no"); 
} 

И это тоже работает:

 NSArray *noArray = @[@NO,@NO,@NO]; 
if ([noArray containsObject:@NO]) 
{ 
    NSLog(@"No array contains no"); 
} 

Вы должны сравнить один и тот же объект рода.

Последний вариант:

NSArray *noArray = @[@[@"no"],@[@"no"],@[@"no"]]; 
NSLog(@"This array look like your array : %@",[noArray description]); 

if ([noArray containsObject:@[@"no"]]) 
{ 
    NSLog(@"No array contains no"); 
} 
+0

Это может быть сделано. Но это 'noArray' не совпадает с массивом' favouriteMark', который имеет OP. – Fogmeister

+0

На самом деле я получаю arrayList из базы данных. '[favouriteMark = [[NSArray alloc] initWithArray: [self.databaseCall loadFromDB: query]];' –

+0

@Fogmeister Что такое объект имеет ваш массив favouriteMark? –

0

Для целей отладки, замените containsObject: с поиском грубой силы и установить контрольные точки, чтобы увидеть, что происходит:

for(NSObject *element in favouriteMark) { 
    if([element compare:@"no"] == NSOrderedSame) { 
     NSLog(@"Element %@ matches.", element); 
     break; 
    } else { 
     // set breakpoint and inspect element if desired 
     NSLog(@"Element %@ of class %@ does not match.", element, [element class]); 
    } 
} 
+0

Мы все еще не знаем, какой тип объекта находится в массиве. Вы предполагаете, что объекты в массиве являются экземплярами NSString. Из журнала в первой строке я очень сомневаюсь, что это так. – Fogmeister

+0

Я не предполагаю, что они являются нитями. Конечно, они никогда не сравнится, если не NSStrings, но вы можете установить точку останова на второй NSLog и проверить элемент. Я отредактирую, чтобы добавить еще одну полезную информацию. – RobP

Смежные вопросы