У меня есть приложение, которое использует сохраненный файл для загрузки 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 с ДВУМЯ частями данных уже существует, и мой код пытается прочитать ТРЕТЬЕ, а именно переменную roundingSegment. (где я отступил в коде под // Проверьте, существует ли файл ...)
Нужно ли удалять существующий массив NSMutableArray, в котором сохранены данные пользователя при загрузке НОВОЙ версии Приложения? И если да, то КАК?!
ИЛИ, более предпочтительно, есть ли способ дополнить и добавить третий фрагмент данных при первом запуске приложения, чтобы он не зависал при попытке получить мою переменную roundingSegment?
Любая помощь, которую вы можете оказать, будет принята с благодарностью!