-1

我正在使用 xcode 4 来编译这个应用程序。

我正在构建一个太空游戏。为了存储我的高分值(在这种情况下由 int _totalSeconds 表示),我创建了一个数组,并将其写入文件。每当角色“死亡”时,他的高分就会作为数组从文件中检索出来,添加到数组中,然后写回文件中。然后我在我的应用程序的高分页面中调用它并使用一些排序方法。但是,这部分无关紧要。问题是用户“死”后,他的高分似乎没有保存到数组中。这是我的代码块在用户“死亡”后开始发挥作用(顺便说一下,这是创建此文件的唯一代码,可能是我正在调用的这个文件尚未创建吗?如果是这样,我如何创建它?):

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

控制台说[array count] = 0。我很困惑。此外,作为旁注,这个应用程序在 Xcode 3(它的起源)中完美运行。如果您需要任何其他信息,请发表评论。

4

3 回答 3

0

我发现我必须先分配 init NSMutableArrays 才能接受任何数据

NSMutableArray *sortedArray = [[NSMutableArray alloc] initWithCapacity:c];

于 2013-09-04T22:04:49.333 回答
0

在这一行之后:

NSMutableArray *array = [NSMutableArray arrayWithContentsOfFile:choice];

你需要检查那array不是nilnil如果没有文件存在(或文件内容无效),它将是。

所以:

if (array == nil) {
    array = [NSMutableArray array];
}
于 2013-09-04T22:03:39.870 回答
0

我不知道为什么它在 XCode 3 上工作,但问题是如果文件不存在则-(instancetype)arrayWithContentsOfFile:filePath返回,这很可能是第一次调用代码时的情况。nil因此,当您在数组上调用方法时,什么都没有发生并且0ornil被返回,这就是为什么您的 nil 数组的长度为零并且没有添加项目。

在检索文件之前,您需要添加一个条件来检查文件是否存在。

我已经在我的项目中测试了您的代码,并将第 5 行更改为以下代码:

NSMutableArray *array;
if ([[NSFileManager defaultManager] fileExistsAtPath:choice]) {
    array = [NSMutableArray arrayWithContentsOfFile:choice];
}
else {
    array = [[NSMutableArray alloc] init];
}

这样,您不会在文件不存在时获取 nil 对象,而是创建一个新数组并使用它来存储高分。

于 2013-09-04T22:04:44.470 回答