Добавление новых данных в существующий сохраненный NSMutableArray, сохраненный на iPhone - PullRequest
0 голосов
/ 23 февраля 2012

У меня есть приложение, которое использует сохраненный файл для загрузки 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?

Любая помощь, которую вы можете оказать, будет принята с благодарностью!

1 Ответ

0 голосов
/ 24 февраля 2012

Вам нужно проверить [dataArray count], чтобы увидеть, сколько элементов в вашем массиве.

Вам также следует рассмотреть возможность рефакторинга вашего кода, чтобы использовать лучший механизм для хранения данных приложения. Взгляните на NSUserDefaults.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...