我有一个应用程序,每次应用程序启动时都会使用保存的文件加载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'变量时它不会挂起?
您可以借出的任何帮助将不胜感激!
答案 0 :(得分:0)
您需要检查[dataArray count]以查看数组中有多少元素。
您还应该考虑重构代码以使用更好的机制来存储应用数据。看看NSUserDefaults
。