2012-03-14 2 views
0

임 테이블보기로 작업하고, 왜 내 if 문이 false인지 궁금합니다. 아마 아주 간단한 오류 일 것입니다. 나는 디버깅을했고, 'message'는 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 개체의 내용과 사과 주소의 NSString 개체의 내용을 비교하고 있습니다 "*"는 새 변수를 선언 할 때 클래스 유형의 객체에 대한 포인터가 만들어 짐을 의미합니다. 일반적으로 포인터와 메모리 관리에 대한 많은 정보를 찾을 수 있습니다. 대답을 조금 수정하면 정식 메소드 서명이 추가됩니다 ("메소드 서명"이 종을 울리지 않는다면 실제로 추가 정보를 찾으려고합니다.하지만 괜찮습니다. 우리는 모두 하루를 시작했습니다 :)) –

0

message은 메모리에있는 NSString 개체의 포인터 주소입니다. ==을 수행하면 문자열의 내용이 아닌 포인터의 주소가 비교됩니다. 실제 NSString 개체의 내용을 비교하려면 적절한 방법 isEqualToString:을 사용해야합니다.

다음 예제에서는 두 개의 문자열을 만들고 동일한 내용이지만 포인터 주소가 다른 것으로 나타났습니다. NSLog()에있는 %p은 포인터 주소를 인쇄합니다.

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