2010-08-02 7 views
0

두 문자열을 비교하려면 isEqualToString을 사용하고 있습니까? 다음과 같이두 문자열 비교

if ([ somethingString isEqualToString: @"MyString" ] ) 
    { //do something } else { //do something else } 

을 지금, 나는 NSLogsomethingString을 조사하고 그것이 내가 기대했던 보여줍니다에서 확인이 나타납니다. 그러나 if 문은 작동하지 않습니다.

if가 실행되기 전에 디버거에 개체가 표시 되더라도 형식이나 다른 점이 잘못되었다고 생각합니다.

somethingString은 객체 배열로 채워진 UIPickerView에서 가져옵니다. 이것이 차이가 있다면.

의견이 있으십니까?

ps. 내가 비교를 사용하여 시도 : 그리고 확실히 작동하지 않습니다. 당신은 충분한 정보를 제공하지 않습니다 if ([somethingString compare: @"MyString"] == NSOrderedSame) { //do stuff }

+0

savedFirstNotice와 mother 사이의 CFEqual 테스트를 방금 수행 한 결과 로그 출력에 Mother and Mother가 표시되어 있어도 Equal이 아니라는 결과가 나타납니다. 이제는 이것이 의미하는 바를 알아야합니다 .... – MadProfit

답변

0

당신은해야한다. somethingStringNSString의 하위 클래스 인 경우 (그렇지 않은 경우 처음에는 isEqualToString:을 구현하지 않음) 값이 "MyString"인 경우 [somethingString isEqualToString: @"MyString"]YES을 반환합니다.

+1

isEqualToString의 문제점 : 문자열 비교를 위해 ...? – Kalle

+0

나는 비교를 시도했고 또한 NSOrderedSame과 비교하여 제안을 시도했다. 비교는 실제로 대문자를 무시하는 옵션이 아닌 한 잠재적으로 somethingString과 SomethingString을 다른 것으로 비교하여 문자열을 순위 지정합니다. 정확한 비교를 원하기 때문에 제 일을 비교해보십시오. 그러나 그렇지 않았습니다. – MadProfit

+0

비교는 여기에서 사용할 올바른 방법이 아닙니다. 오버 헤드가 발생하며 순위가 필요하지 않는 한 피해야합니다. if ([a compare : b] == NSOrderedSame)는 여러 가지 이유로 눈살을 찌푸리게됩니다. – katzenhut

0

+0

다음과 같이 somethingString을 선언했습니다. NSString * somethingString; – MadProfit

0

예상대로 작동하지 않는 코드 simple, self-contained example을 게시 할 수 있습니까? isEqualToString을 호출하는 올바른 방법입니다. 문제는 다른 곳에서 발생합니다. 두 개체가 모두 유효합니까? 어쩌면 그들 중 하나가 이미 할당 해제되었거나 nil 일 수 있습니다. 내용 등가물 ([foo isEqualToString:bar])을 가진 포인터 등가성 (foo == bar)을 혼동하지 않습니까?

zoul의 요청에 따라
+0

도움이나 제안이 있으시면 zoul에 문의하십시오. 코드 및 로그는이 스레드에 포함되어 있습니다. – MadProfit

+0

나는 등가물이 아닌 콘텐츠 동등성을 추구하고 객체의 주소를 검사하여 여러 개의 어머니가 내 앱을 돌아 다니며 혼란스럽고 여러개의 어머니가있는 현실과 달리 엄마/법??! – MadProfit

0

, 여기에 코드와 로그 ....

어머니 = @ "어머니"입니다;

경우 ([savedFirstNotice isEqualToString : 어머니])

{ NSLog (@"Mother was triggered") } 

    else 

    {  NSLog (@"Mother was not choosen"); 
      NSLog (@"savedFirstNotice is: %@", savedFirstNotice); 
      NSLog (@"mother is: %@", mother); 
    } 

2010-08-02 20 : 34 : 16.337 SafetyKnight [4492 : 307] 어머니

2010-08-02 20

을 선택이 끝난되지 : 34 : 16.338 SafetyKnight [4492 : 307] savedFirstNotice이다 : 어머니
2010-08-02 20 : 34 : 16.339 SafetyKnight [4492 : 307] 어머니는 : 어머니

또한 savedFirstNotice가있는 NSString 선언되었음을 유의 . 어머니는 어머니와 동등한 것처럼 보이고 "어머니는 방아쇠를 당겼습니다"는 올바른 응답이어야합니다.

+0

savedFirstNotice와 mother 사이의 CFEqual 테스트를 방금 수행 한 결과, 로그 출력에 Mother and Mother가 표시 되어도 Equal이 아닌 결과가 나타납니다. 자, 이것이 무엇을 의미하는지 알아 내야합니다. - – MadProfit

+0

아마도 savedFirstNotice는 마지막에 추가 공백을 포함 할 수 있습니다. @ "Mother"와 같은가요? – MrMage

0

isEqualToString이 수행하는 작업을 파악하는 데 어려움을 겪고있는 초보자에게이 문제를 해결하기 위해이 작업을 수행했습니다.

(1) 두 문자열이 CFEqual인지 확인하십시오. (2) 두 경우 모두 문자열별로 문자를 구문 분석하십시오. 내 경우, 두 개의 문자열은 디버거에서 이해가되지 않는 동일한 길이가 아니 었습니다. 어떤 이유로 든 savedFirstNotice 문자열을 구문 분석 한 후 문자열 앞에 하나의 공백을 추가하고 문자열 뒤에 두 개의 공백을 추가했습니다. 지금까지 일관된 액션 인 것처럼 보이기 때문에이 메소드에서 사용하는 모든 변수에서 쉽게 제거 할 수 있습니다.

의견을 보내 주신 모든 분들께 감사드립니다. 제대로 작동하지 않는 사람이 나에게 아이디어 나 생각을 전합니다.

if (CFEqual (savedFirstNotice , mother)) 
    { NSLog (@" Both savedFirstNotice and mother are Equal") ; } 
     else 
     { NSLog (@" savedFirstNotice and mother are NOT Equal ") ; 
    NSLog (@" The length of savedFirstNotice is %d", savedFirstNotice.length); 
    NSLog (@" The length of mother is %d", mother.length); 
    NSLog (@" savedFirstNotice character 0 %c ",[ savedFirstNotice characterAtIndex: 0 ]); 
    NSLog (@" savedFirstNotice character 1 %c ",[ savedFirstNotice characterAtIndex: 1 ]); 
         // duplicate to capture the entire string 
      } 

은 또한, 나는 하나 CFEqual 및 관련 항목에 애플 문서를 읽어 것이 좋습니다 여기

내 문제를 발견 코드입니다.