сортировка странных результатов NSMutableArray с Core Data - PullRequest
0 голосов
/ 30 июня 2010

Я шел по этому часу и не могу найти проблему. У меня есть массив результатов, которые я сохраняю в конце игры в базовой модели данных. После сохранения, когда я возвращаюсь в viewcontroller с высокими оценками, я загружаю оценки из базовых данных и сортирую массив, используя следующую функцию, где массив показателей представляет собой NSMutableArray с моими 10 высокими показателями

[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;
    }

}

Это всегда помещает последнюю запись счета в верхней части списка, независимо от его значения ?? Самое странное, что когда я перезагружаю свое приложение, та же функция размещает все оценки в правильном порядке убывания, что я и хочу, но, очевидно, я не хочу, чтобы пользователь перезапускал приложение, чтобы результаты отображались в правильном порядке. Может кто-нибудь, пожалуйста, пролить свет на то, что происходит ??

Большое спасибо

Jules

1 Ответ

1 голос
/ 30 июня 2010

Единственная очевидная проблема, которую я вижу с вашим кодом, состоит в том, что параметр контекста, который вы передаете sortUsingFunction:context (то есть @selector(totalScore)), не используется вашей функцией и может быть заменен на NULL.Это не объясняло бы поведение, которое вы наблюдаете, и в любом случае это скорее вопрос стиля.Еще одна вещь, которую вы можете проверить, это то, что тип totalScore в действительности int.Ваши операторы NSLog в функции сортировки обрабатываются так, как если бы они были объектами (%@ - это спецификатор формата для объекта, для и int вы бы использовали %d.) Вы уверены, что общая оценка на самом деле не являетсяNSString или NSNumber?Кроме того, функция сортировки выглядит так, как будто она должна работать, и, поскольку вы говорите, что она работает при запуске, я бы посмотрел на проблему вне этого кода.

Проверены ли вы в отладчике или черезNSLog утверждение, что массив на самом деле неправильно отсортирован после вызова?Возможно, есть какая-то ошибка в том, как вы отображаете отсортированные оценки, или что-то происходит после сортировки, чтобы изменить порядок?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...