2012-03-14 2 views
0

Im работает с табличным представлением, и им интересно, почему мой if-statement является ложным. Вероятно, действительно простая ошибка. Я отлаживал, и я увидел, что «сообщение» содержит значение ячейки tableview.TableView: Вероятно, простая ошибка

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
NSString *message = [NSString stringWithFormat:@"%@",[tableViewArray objectAtIndex:indexPath.row]]; 
NSString *apple = [NSString stringWithFormat:@"Apple"]; 
if(apple == message) 
..... 

Спасибо за помощь!

ответ

0

Вы сравниваете объекты. Вы хотите использовать следующий код вместо:

if ([apple isEqualToString:message]) { 
    // ... 
} 
0

Ну да, это просто, вы сравниваете адрес два различных переменных, они не одни и те же цифры наверняка :) Для сравнения содержимого вы используете

- (BOOL)isEqualToString:(NSString *)aString 

Пожалуйста, внимательно прочитайте инструкцию NSString reference, вы также можете найти литературу о языке c.

+0

Спасибо за ваш ответ. Не могли бы вы просто отправить код? Я действительно не понимаю! Да, я так думаю, нужно изучить некоторые основы :) Спасибо – Seb

+0

Код Рида Олсена опубликован совершенно правильно, вы сравниваете содержимое объекта NSString по адресу apple с содержимым объекта NSString по адресу сообщения, «*», когда вы объявляете новую переменную, означает, что будет создан указатель на объект типа класса. Вы можете найти много информации об указателях и управлении памятью в целом. Поправьте ответ немного, добавив там полную подпись метода (вы действительно должны попытаться найти дополнительную информацию, если «подпись метода» не звонит, но все в порядке, мы все начали в один прекрасный день :)) –

0

В вашем случае message - адрес указателя на объект NSString в памяти. Когда вы делаете ==, вы сравниваете адреса указателей, а не содержимое строки. Чтобы сравнить содержимое фактических объектов NSString, вам необходимо использовать соответствующий метод isEqualToString:.

В следующем примере я создал две строки и показал, что они имеют одинаковый контент, но разные адреса указателей. %p в NSLog() печатает по адресу указателя

NSString *string1 = [NSString stringWithFormat:@"test"]; 
NSString *string2 = [NSString stringWithFormat:@"test"]; 

NSLog(@"(%p == %p)  => %d", string1, string2, string1 == string2); 
NSLog(@"[string1 isEqualToString:string2] => %d", [string1 isEqualToString:string2]); 

=> 2012-03-14 22:55:07.395 Untitled[2797:707] (0x1099146c0 == 0x109914870)  => 0 
=> 2012-03-14 22:55:07.398 Untitled[2797:707] [string1 isEqualToString:string2] => 1 
Смежные вопросы