繁体   English   中英

使用核心数据对NSMutableArray怪异结果进行排序

[英]sorting NSMutableArray weird results with Core Data

我已经花了几个小时了,找不到问题。 我拥有一系列分数,这些分数会在比赛结束时保存在核心数据模型中。 保存后,当我返回高分视图控制器时,我从核心数据加载了分值,并使用以下函数对数组进行了排序,其中scores array是我的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;
    }

}

始终将最后一个得分条目放在列表顶部,而不管其值如何? 奇怪的是,当我重新启动应用程序时,相同的功能会将所有分数按我想要的正确降序排列,但是显然我不希望用户必须重新启动应用程序才能以正确的顺序显示分数。 任何人都可以对发生的事情有所了解吗?

非常感谢

朱尔斯

我在您的代码中看到的唯一明显问题是,您传递给sortUsingFunction:context的上下文参数(即@selector(totalScore) )未被您的函数使用,可以替换为NULL 但这并不能说明您所看到的行为,无论如何,更多的是风格问题。 您可能要检查的另一件事是inttotalScore类型。 您的NSLog语句在sort函数中将它们视为对象( %@是对象的格式说明符,对于int,您将使用%d 。)您确定总分实际上不是NSStringNSNumber 除此之外,sort函数看起来应该可以工作,而且由于您说它在启动时就可以工作,因此我将在此代码之外查找该问题。

您是否在调试器中或通过NSLog语句验证了调用后该数组实际上是错误排序的? 也许您在显示排序分数时存在一些错误,或者排序更改后发生了什么变化?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM