【问题标题】:iphone-Array Won't Add NSNumberiphone-Array 不会添加 NSNumber
【发布时间】:2013-09-04 21:50:05
【问题描述】:

我正在使用 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(它的起源)中完美运行。如果您需要任何其他信息,请发表评论。

【问题讨论】:

  • [NSMutableArray arrayWithContentsOfFile:]NSArray的方法,不是NSMutableArray,它可以返回一个不可变数组。您需要使用-addObjectsFromArray: 之类的方法将其结果转换为可变数组。

标签: iphone objective-c arrays writetofile


【解决方案1】:

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

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

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

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

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

【讨论】:

  • 谢谢你彻底解决了我的问题
【解决方案2】:

在这一行之后:

NSMutableArray *array = [NSMutableArray arrayWithContentsOfFile:choice];

您需要检查array 不是nil。如果文件不存在(或文件内容无效),则为nil

所以:

if (array == nil) {
    array = [NSMutableArray array];
}

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多