проблема с пользовательскими настройками по умолчанию при сохранении игры ... (массив int) - PullRequest
1 голос
/ 28 июля 2010

У меня проблема с сохранением чего-либо, и у меня официально нет идей.я хочу сохранить целочисленный массив в userDefaults, а затем перезапустить приложение, загружающее этот массив, и перезапустить игру с этой последней точки.

Что я делаю, так это то, что после каждого хода моя логика ИИ сохраняетфактическое состояние игры в массив -> пока все хорошо, это работает нормально.Массив сохраняется, и когда я «ре» читаю сохраненный массив, кажется, что все в порядке ... на самом деле он сохранил правильный массив!

Теперь я перезапускаю игру.Я проверяю переменную bool, которую я также сохранил, если игра была прервана из-за упорядоченности.тоже отлично работает.

Теперь уловка.Я прочитал массив из userDefaults и WOHOOO!я получаю немного другой массив, тогда я сохранил!я действительно не могу понять, почему: (

хорошо: теперь код:

вот что я делаю, чтобы сохранить доску:

NSData *data = [NSData dataWithBytes:&boardToSave length:sizeof(boardToSave)];
[userDefaults setObject:data forKey:@"MB_boardSave"];

и вот что ясделать, чтобы получить данные при инициализации платы:

int loadBoard[8][8] = {0};
NSData *data = [userDefaults objectForKey:@"MB_boardSave"];
memcpy(&loadBoard, data.bytes, data.length);

снова ... то, что происходит правильно, то, что выходит не так: (

любые предложения будут очень признательны! Я также открыт для альтернативных вариантов сохранения, если вы думаете, что есть лучшие!

thx

Ответы [ 2 ]

1 голос
/ 28 июля 2010

изменить ошибка в том, что вы memcpy до &loadBoard. Это должно быть просто loadBoard, так как это указатель. То же самое касается boardToSave.

Самое смешное, что он выполняет какую-то работу (а не вылетает), как вы делаете.

0 голосов
/ 28 июля 2010

мне ужасно жаль, но его слепота кода поразила меня:)

где я хотел это

if(loadBoard[j][i] == 1 || loadBoard[j][i] == 11 || loadBoard[j][i] == 12){
 [...];
}

у меня было это

if(loadBoard[j][i] == 1 || boardSetup[j][i] == 11 || boardSetup[j][i] == 12){
 [...];
}

неудивительно, что это не сработало:) НО, несмотря на все свои достоинства, была некоторая ошибка с сохранением и загрузкой массива, а также после того, как у меня были правильные результаты, я смог найти вышеуказанную «глазную» ошибку:)

что я сделалТеперь для сохранения массива нужно использовать не массив int [8] [8], а массив NSMutableArray, который я сохраняю непосредственно в userDefaults.(не более memcopy и так далее ...) вот что я сделал и что (наконец) работает для меня

сохранить:

NSMutableArray* array = [[NSMutableArray alloc] init];
// ... fill Array like so: [array addObject:[NSNumber numberWithInt:11]]; ...
[userDefaults setObject:array forKey:@"MB_boardSave"];
[userDefaults synchronize];

нагрузка:

NSArray* array = [userDefaults objectForKey:@"MB_boardSave"];
int example = [[array objectAtIndex:0] intValue];

может быть, это будет полезно и для кого-то еще!

...