2012-10-11 2 views
3

입니다 DB에서 나에게 반환되는 배열을 정렬합니다. 그것은 result에 값이 전에 == 비교에 도달하는 것이 가능하다 믿기 때문에'=='의 왼쪽 피연산자는 내 IOS는</p> <pre><code>The left operand of '==' is a garbage value </code></pre> <p>이 코드는이 ..이 방법을 사용하여 발생하는 곳 모습입니다 프로젝트 내가 analize 때이 오류가 무엇입니까 쓰레기 값

- (NSMutableArray *)startSortingTheArray:(NSMutableArray *)unsortedArray 
{ 
    [unsortedArray sortUsingComparator:^ NSComparisonResult(SearchResultItem *d1, SearchResultItem *d2) { 
     //initalize comparison 
     NSComparisonResult result; 

     NSInteger manufacturerID1 = d1.manufacturerID; 
     NSInteger manufacturerID2 = d2.manufacturerID; 
      if (manufacturerID1 > manufacturerID2) 
       return NSOrderedAscending; 
      if (manufacturerID1 < manufacturerID2) 
       return NSOrderedDescending; 
      if (manufacturerID1 == manufacturerID2) { 

      NSString *model1 = d1.model; 
      NSString *model2 = d2.model; 
      result = [model1 localizedCompare:model2]; 
     } 
     if (result == NSOrderedSame) { 
//.. 

답변

5

컴파일러는 불평한다.

코드 주어진 최선의 선택은 else ifelse 사용하는 것입니다

if (manufacturerID1 > manufacturerID2) 
    return NSOrderedAscending; // we won't reach the comparison so result doesn't matter 
else if (manufacturerID1 < manufacturerID2) 
    return NSOrderedDescending; // we won't reach the comparison so result doesn't matter 
else { 
    NSString *model1 = d1.model; 
    NSString *model2 = d2.model; 
    result = [model1 localizedCompare:model2]; // in any other case, result will be set. 
} 
... 

을 또는 당신이 할 수 있습니다 :

NSComparisonResult result; 
... 
if (manufacturerID1 > manufacturerID2) 
    return NSOrderedAscending; 
else if (manufacturerID1 < manufacturerID2) 
    return NSOrderedDescending; 

NSString *model1 = d1.model; 
NSString *model2 = d2.model; 
result = [model1 localizedCompare:model2]; 
... 

심지어이 :

if (manufacturerID1 > manufacturerID2) 
    return NSOrderedAscending; 
else if (manufacturerID1 < manufacturerID2) 
    return NSOrderedDescending; 

NSComparisonResult result = [d1.model localizedCompare:d2.model]; 
... 

이 방법을 비교기에 도달하면 컴파일러는의 값을 알고 있습니다.이 이미 설정되었습니다.

+0

멋지다. 완벽하게 작동했습니다. 시간이 다되면 답을 표시 할 것입니다 ... 감사합니다. – HurkNburkS

0

나는 정확하게 <,> 또는 == 중 하나가 manufacturerID [12] 비교와 관련하여 참이어야한다는 것을 이해하지 못하는 "솔버"라고 생각합니다. result 값이 초기화되지 않은 것을 알 수 있도록 if (manufacturerID1 == manufacturerID2) 블록을 제거해보십시오. 귀하의 의견에도 불구하고, 당신은 실제로 그 가치를 초기화하지 않습니다.