将新数据添加到保存在iPhone上的现有已保存的NSMutableArray

时间:2012-02-23 19:54:21

标签: iphone objective-c xcode

我有一个应用程序,每次应用程序启动时都会使用保存的文件加载2个数据。运行完美。在我的应用程序的新版本,我想添加第三个数据。但是,当我运行它时出现此错误:

由于未捕获的异常'NSRangeException'而终止应用程序,原因:' * - [__ NSArrayM objectAtIndex:]:索引2超出边界[0 .. 1]

因为当它在启动时读取文件时,当现有的已保存文件只包含两个时,它会调用第三个数据。

这是我的代码:

int roundingSegment = 1;

然后:

- (void)viewDidLoad {

//---Check for existence of the Archive File on Startup-
NSFileManager *filemgr;
NSString *docsDir;
NSArray *dirPaths;
filemgr = [NSFileManager defaultManager];

// Get the documents directory
dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
docsDir = [dirPaths objectAtIndex:0];

// Build the path to the data file
dataFilePath = [[NSString alloc] initWithString:[docsDir stringByAppendingPathComponent:@"data.archive"]];

// Check if the file already exists, and if so, loads the data
if ([filemgr fileExistsAtPath:dataFilePath]) {
    NSMutableArray *dataArray;
    dataArray = [NSKeyedUnarchiver unarchiveObjectWithFile:dataFilePath];
    defaultValueTextField.text = [dataArray objectAtIndex:0];
    segment = [[dataArray objectAtIndex:1] intValue];
       roundingSegment = [[dataArray objectAtIndex:2] intValue];
    NSLog(@" Segment is %d", segment);
       NSLog(@" RoundingSegment is %d", roundingSegment);
    }

[super viewDidLoad];
}

问题出现在方法的最后,因为现有的具有两个数据的NSMutableArray文件已经存在,而我的代码正在尝试读取THIRD,即'roundingSegment'变量。 (我在//检查文件是否存在的情况下缩进代码...)

我是否必须删除用户在加载新版App时保存的数据的现有NSMutableArray?如果是这样,怎么样?!

OR,更优选的是,有没有办法在应用程序的第一次运行时增加和添加第三个数据,这样当它试图获取我的'roundingSegment'变量时它不会挂起?

您可以借出的任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

您需要检查[dataArray count]以查看数组中有多少元素。

您还应该考虑重构代码以使用更好的机制来存储应用数据。看看NSUserDefaults