尝试对数组进行排序时崩溃

时间:2013-08-20 17:06:36

标签: objective-c sorting crash nsmutablearray runtime-error

我正在尝试在我制作的太空射击游戏中制作一个高分页面。所以,我所做的就是使用以下代码保存得分:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSNumber *highscore = [[NSNumber alloc] initWithInt:_totalSeconds]; 
NSString *choice = [NSString stringWithFormat:@"%@/userschoice", documentsDirectory];
NSMutableArray *array = [NSArray arrayWithContentsOfFile:choice];
[array addObject: highscore];
[array writeToFile:choice atomically:YES];

整数_totalSeconds是用户的分数。然后,在我的viewDidLoad函数中,我输入了以下代码:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *choice = [NSString stringWithFormat:@"%@/userschoice", documentsDirectory];
NSMutableArray *array = [NSArray arrayWithContentsOfFile:choice];
int _highscoresAmount = [array count]; 
NSNumber *highscore2 = [[NSNumber alloc] init];
NSNumber *highscore2Two = [[NSNumber alloc] init];

int _count = 0;

while (_count<_highscoresAmount){

    for (int i=0; i<_highscoresAmount; i++){

        int j = i+1; 
        highscore2 = [array objectAtIndex:i];
        highscore2Two = [array objectAtIndex:j];
        if (highscore2Two > highscore2){

            [array replaceObjectAtIndex:i withObject:highscore2Two];
            [array replaceObjectAtIndex:j withObject:highscore2]; 

        }


}

    _count = _count + 1;

}


for (int i=0; i< _highscoresAmount;i++){

    highscore2 = [array objectAtIndex:i];
    NSString *highscore3 = [NSString stringWithFormat:@"%@", highscore2];
    NSLog(highscore3); 

}

此代码的目标是使用我的代码中指定的路径检索我在文件中编写的数组。然后,我想从最高到最低排序数组。

这种构建很好,但是当我加载视图时,应用程序崩溃了。有什么问题?

注意:我也尝试使用类似的代码在for循环中进行for循环,并且出现了同样的问题。

此外,这是崩溃日志:

无法读取未知的加载命令0x22 无法读取未知的加载命令0x22 无法读取未知的加载命令0x22 无法读取未知的加载命令0x22 无法读取未知的加载命令0x22 无法读取未知的加载命令0x22 无法读取未知的加载命令0x22 无法读取未知的加载命令0x22 无法读取未知的加载命令0x22 无法读取未知的加载命令0x22 无法读取未知的加载命令0x22 无法读取未知的加载命令0x22 无法读取未知的加载命令0x22 无法读取未知的加载命令0x22 无法读取未知的加载命令0x22 无法读取未知的加载命令0x22 无法读取未知的加载命令0x22 无法读取未知的加载命令0x22 无法读取未知的加载命令0x22 无法读取未知的加载命令0x22 无法读取未知的加载命令0x22 无法读取未知的加载命令0x22 无法读取未知的加载命令0x22 无法读取未知的加载命令0x22 无法读取未知的加载命令0x22 无法读取未知的加载命令0x22 无法读取未知的加载命令0x22 无法读取未知的加载命令0x22 无法读取未知的加载命令0x22 无法读取未知的加载命令0x22 无法读取未知的加载命令0x22 无法读取未知的加载命令0x22 无法读取未知的加载命令0x22 无法读取未知的加载命令0x22 无法读取未知的加载命令0x22 无法读取未知的加载命令0x22 无法读取未知的加载命令0x22 无法读取未知的加载命令0x22 无法读取未知的加载命令0x22 无法读取未知的加载命令0x22 杀 退出

1 个答案:

答案 0 :(得分:1)

我认为这里有两件大事。首先,您要将数组声明为NSMutableArray,但实际上是在制作NSArray。你需要使用[NSMutableArray arrayWithContentsOfFile:]来制作一个可变数组。

第二,你不应该实施自己的排序算法。只需使用内置的排序方法(例如-sortUsingComparator)

(编辑)

哦,你也应该使用-stringByAppendingPathComponent而不是+ stringWithFormat来构建路径