【问题标题】:Crash when trying to sort an array尝试对数组进行排序时崩溃
【发布时间】:2013-08-20 17:06:35
【问题描述】:

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

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 杀 退出

【问题讨论】:

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


    【解决方案1】:

    我发现这里有两个主要问题。第一个是您将数组声明为 NSMutableArray,但实际上是在创建一个 NSArray。您需要使用 [NSMutableArray arrayWithContentsOfFile:] 来制作可变数组。

    第二个是您不应该实现自己的排序算法。只需使用内置的排序方法(例如 -sortUsingComparator:)

    (编辑)

    哦,还有,你应该使用 -stringByAppendingPathComponent 而不是 +stringWithFormat 来构造路径

    【讨论】:

    • 我首先解决了 nsmutable 数组问题。该应用程序仍然无法正常工作。我尝试了 stringByAppendingPathComponent,但它给了我 NSString 可能无法响应 stringByAppendingPathComponent 的警告。
    • 请记住,我使用的是 xcode 3,因此可能会导致一些问题
    • 您应该发布崩溃日志。在没有崩溃日志的情况下调试崩溃基本上是不可能的。
    • 我添加了崩溃日志。另外,可能是 objectAtIndex:... 没有收到 int 变量吗?
    • 这不是崩溃日志。这只是来自调试器的一堆错误消息。
    猜你喜欢
    • 2015-08-17
    • 1970-01-01
    • 1970-01-01
    • 2021-01-08
    • 1970-01-01
    • 2021-12-17
    • 1970-01-01
    • 2015-08-22
    相关资源
    最近更新 更多