簡體   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