2010-06-30 2 views
0

나는 몇 시간 동안이 문제를 해결하지 못했습니다. 핵심 데이터 모델에서 게임이 끝날 때 저장하는 배열의 배열이 있습니다. 내가 핵심 데이터에서 점수를로드하고이 항상 마지막 점수를 배치 점수 배열 내 10 개 높은 점수정렬 코어 데이터 NSMutableArray 이상한 결과

[self.scoresArray sortUsingFunction:firstNumSort context:@selector(totalScore)]; 

//function to sort high scores in the array 
NSInteger firstNumSort(id str1, id str2, void *context) { 
    static int counter = 0; 

    NSLog(@"counter = %d", counter); 
    counter++; 
    //NSLog(@"should be sorting"); 
    int num1 = [str1 totalScore]; 
    int num2 = [str2 totalScore]; 
    if (num1 > num2) { 
     NSLog(@"%@ is greater than %@", num1, num2); 
     return NSOrderedAscending; 
    } 
    else if (num1 < num2){ 
     NSLog(@"%@ is less than %@", num1, num2); 
     return NSOrderedDescending; 
    } 
else { 
    NSLog(@"%@ is the same as %@", num1, num2); 
    return NSOrderedSame; 
    } 

} 

와 함께있는 NSMutableArray 인 다음 함수를 사용하여 배열을 정렬의 ViewController 높은 점수로 돌아갈 때 저장 한 후 해당 값에 관계없이 목록 맨 위에 항목 ?? 낯선 것은 내가 내 애플 리케이션을 다시 시작할 때 같은 기능은 내가 원하는 바대로 내림차순으로 올바른 점수를 둡니다.하지만 사용자가 정확한 순서로 표시된 점수를보기 위해 앱을 다시 시작하지 못하게하려는 것입니다. 아무도 무슨 일이 일어나고 있는지에 대해 약간의 빛을 비춰 줄 수 있니?

많은 감사

+0

str1과 str2는 어떤 유형입니까? – Eiko

답변

1

난 당신의 코드를 볼 수있는 유일한 명백한 문제는 당신이 sortUsingFunction:context에 전달하는 컨텍스트 매개 변수 (즉, @selector(totalScore)) 함수가 사용되지 않고 대체 될 수있다 NULL. 그것은 당신이보고있는 행동을 설명하지 않으며 어쨌든 더 스타일의 문제입니다. 한 가지 다른 점은 totalScore의 유형이 실제로 int 인 것입니다. 정렬 함수에있는 NSLog 문은 마치 객체 인 것처럼 취급합니다 (%@은 객체의 형식 지정자이고을 사용합니다). 총점이 실제로 NSString 또는 NSNumber이 아니십니까? 그 외에는 정렬 함수가 제대로 작동하는 것처럼 보입니다. 시작시에 수행한다고 말하기 때문에이 코드 외부에서 문제를 조사하게됩니다.

당신은 디버거 또는 배열이 실제로 호출 후 잘못 정렬하는 NSLog 성명을 통해 중, 확인 했습니까? 아마도 정렬 된 점수를 표시하는 방법에 어떤 버그가 있거나 순서를 변경하기 위해 어떤 일이 발생 했습니까?

+0

+1'str1'이 NSManagedObject 인 경우 [str1 totalScore]는 객체에 대한 포인터를 반환합니다. 정수에 포인터를 할당하면 크지 만 무의미한 정수가됩니다. 마지막 점수는 항상 최상위 메모리 주소를가집니다. 나는 int num1 = [[str1 totalScore] intValue];를 제안한다. – TechZen

+0

당신은 내가 얻을 깜빡 ... 절대적으로 옳았다 코어 데이터에 저장된의 NSNumber입니다 totalScore의있는 intValue .... 이상하게 INT var에 실제로 올바른 값으로 할당하지만이 비교에 왔을 때 작업 않네 받고 있지만 ? 어쩌면 일부 내부 가지 ... 거기에 당신의 도움이 쥘에 대한 어쨌든 덕분에가는 – Jules