Можно ли сохранить целочисленный массив с помощью NSUserDefaults на iPhone? - PullRequest
8 голосов
/ 08 декабря 2008

Можно ли сохранить целочисленный массив с помощью NSUserDefaults на iPhone? У меня есть массив, объявленный в моем файле .h как: int playfield[9][11], который заполняется целыми числами из файла и определяет расположение игрового поля игры. Я хочу иметь несколько слотов для сохранения, где пользователи могут сохранять свои игры. Если я сделаю:

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
[prefs setObject: playfield forKey: @"slot1Save"];

Я получаю ошибку указателя. Если есть возможность сохранить массив целых чисел, каков наилучший способ сделать это, а затем извлечь его позже?

Заранее спасибо!

Ответы [ 4 ]

13 голосов
/ 09 декабря 2008

Вы можете сохранить и получить массив с помощью оболочки NSData

т.е. (без обработки ошибок)

Сохранить

NSData *data = [NSData dataWithBytes:&playfield length:sizeof(playfield)];
[prefs setObject:data forKey:@"slot1Save"];

Load

NSData *data = [prefs objectForKey:@"slot1Save"];
memcpy(&playfield, data.bytes, data.length);
7 голосов
/ 09 декабря 2008

С Документация Apple по NSUserDefaults :

Значением по умолчанию должен быть список свойств, то есть экземпляр (или для коллекций комбинация экземпляров): NSData, NSString, NSNumber, NSDate, NSArray или NSDictionary.

Вот почему вы получаете ошибку указателя.

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

  1. Используйте NSArray из NSArray s для хранения playField в вашем приложении
  2. Сохраните playField в виде массива int, но перед сохранением в NSUserDefaults заполните NSArray числами.
  3. Напишите ваш собственный подкласс NSArchiver для преобразования между массивом целых чисел и NSData.
4 голосов
/ 09 декабря 2008

Вам придется преобразовать это в объект. Вы можете использовать NSArray или NSDictionary.

1 голос
/ 09 декабря 2008

Просто используйте NSArray вместо обычного массива C, тогда это легко решит вашу проблему.

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