我正在使用xcode 4来编译这个应用程序。
我正在建造太空游戏。为了存储我的高分值(在这种情况下由int,_totalSeconds表示),我创建了一个我写入文件的数组。每当角色"死亡"时,他的高分将作为数组从文件中检索,添加到数组中,并写回文件。然后我在我的应用程序的高分页面中调用它并使用一些排序方法。但是,这部分是无关紧要的。问题是,在用户“死亡”之后,他的高分并不会保存到阵列中。这是我的代码块在用户" die"之后发挥作用。 (顺便说一下,这是创建此文件的唯一代码,可能是我正在调用的这个文件尚未创建?如果是,我该如何创建它?):
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];
控制台说[数组计数] = 0.我很困惑。此外,作为旁注,这个应用程序在Xcode 3(源自它)中完美运行。如果您需要任何其他信息,请发表评论。
答案 0 :(得分:0)
这一行之后:
NSMutableArray *array = [NSMutableArray arrayWithContentsOfFile:choice];
您需要检查array
是否不是nil
。如果不存在文件(或文件内容无效),则为nil
。
所以:
if (array == nil) {
array = [NSMutableArray array];
}
答案 1 :(得分:0)
我不知道为什么它在XCode 3上工作,但问题是-(instancetype)arrayWithContentsOfFile:filePath
如果文件不存在则返回nil
,这可能是第一次代码时的情况调用。因此,当您在数组上调用方法时,没有任何反应,并返回0
或nil
,这就是为什么nil数组的长度为零并且未添加项目的原因。
在检索文件之前,您需要添加一个条件来检查文件是否存在。
我已在我的项目中测试了您的代码,并将第5行更改为以下工作:
NSMutableArray *array;
if ([[NSFileManager defaultManager] fileExistsAtPath:choice]) {
array = [NSMutableArray arrayWithContentsOfFile:choice];
}
else {
array = [[NSMutableArray alloc] init];
}
这样,当文件不存在时,不是获取nil对象,而是创建一个新数组,并使用它来存储高分。
答案 2 :(得分:0)
我发现在接受任何数据之前我必须先分配init NSMutableArrays
NSMutableArray * sortedArray = [[NSMutableArray alloc] initWithCapacity:c];