Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование iOS/iPhone
Войти
Регистрация
Восстановить пароль
 
Noobass
0 / 0 / 13
Регистрация: 15.10.2012
Сообщений: 100
#1

Конвертация массива в NSData и обратно - Программирование iOS

05.06.2013, 16:18. Просмотров 685. Ответов 3
Метки нет (Все метки)

Ребят, я тут с NSUserDefaults играюсь, и передо мной стоит задача. СОбрать спрайты со слоя, сохранить их в базе, и потом достать обратно. Спрайты я запаковываю в массив, конвертирую в NSData, и сохраняю :

C#
1
2
3
4
5
6
7
8
9
10
11
-(void) writeObjects:(CCLayer*) layer
{
    CCArray *objects = [CCArray arrayWithArray:[layer children]];
    int length = [objects count];
    
    NSData *objData = [NSData dataWithBytes:objects length:length];
    
    [[NSUserDefaults standardUserDefaults] setObject:objData forKey:@"cntObjects"];
    [[NSUserDefaults standardUserDefaults] synchronize];
    
}

Потом в другой функции я достаю свой объект, переконвертирую его в массив и выкладываю на слой. Делаю я это вот так:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
-(CCLayer*) getObjects
{
    NSData *saveData;
    NSArray *objects;
    NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
    saveData = [prefs objectForKey:@"cntObjects"];
    objects = [NSKeyedUnarchiver unarchiveObjectWithData:saveData];
    
 
    NSLog(@"%@",objects);
    
    CCLayer *layer = [CCLayer node];
    int length = [objects count];
    
    for(int i = 0 ; i < length ; i++)
    {
        [layer addChild:[objects objectAtIndex:i]];
    }
    return layer;
}
Проблема в том, что строка
C#
1
objects = [NSKeyedUnarchiver unarchiveObjectWithData:saveData];
не работает. Кто-нибудь, подскажите метод, которым я смогу успешно конвертировать NSData в массив???
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.06.2013, 16:18
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Конвертация массива в NSData и обратно (Программирование iOS):

NSData как освободить память
Кусок моей программы читает список файлов в папке и вычисляет хэш для каждого...

Массив int8_t или NSData?
Кто что чаще используете? масив int8_t или NSData, вопрос не в том что...

Конвертация qint64 в int и обратно
Здравствуйте, делаю программу и возникла необходимость конвертации qint64 в int...

Конвертация XML в JSON и обратно
Есть ли в Qt стандартные средства конвертации форматов друг в друга?

Конвертация int в char и обратно
Помогите, я запутался... Есть 2 переменных: int a; char b; Допустим a =...

Конвертация BMP в массив и обратно
Добрый день. Есть проблема с конвертацией Ч/Б bmp изображения в массив и...

3
Alex_pac
1291 / 697 / 107
Регистрация: 25.05.2011
Сообщений: 2,158
Записей в блоге: 51
06.06.2013, 08:35 #2
СОбрать спрайты со слоя, сохранить их в базе
если мне память не изменяет, то CCLayer не относится к "безопасным типам" типа NS типов которые успешно сериализуются

а следовательно нельзя сериализовать массив в NSData содержащий CCLayer

используйте NS типы для хранения данных (NSMutableArray, NSMutableDictionary, NSString и прочие)
1
Noobass
0 / 0 / 13
Регистрация: 15.10.2012
Сообщений: 100
06.06.2013, 12:53  [ТС] #3
Alex_pac, я это понимаю, но тогда подскажите мне, как мне "собрать" все спрайты слоя в массив? Не просто перечень их, а именно сделать массив спрайтов, которые я смогу достать из nsuserdefaults, когда мне понадобится
0
Alex_pac
1291 / 697 / 107
Регистрация: 25.05.2011
Сообщений: 2,158
Записей в блоге: 51
06.06.2013, 14:00 #4
вопрос не правильно поставлен

ССlayer привязан к другим объектам ССScene который к привязян Cocos2D или что там внутри

=> чтобы сохранить ССlayer надо будет сохранить всю сцену со всеми вытекающими

и значит для сериализации надо написать свой алгоритм который будет транслировать параметры ССlayer в NSDictionary и обратно, а иначе никак.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.06.2013, 14:00
Привет! Вот еще темы с решениями:

Конвертация Point в String и обратно
Добрый день! Подскажите, как конвертировать Point в String и обратно? ...

Конвертация из jpg в bmp и обратно
И так, ребят, мне срочно нужна помощь! нужно при помощи MS Visual C++...

Конвертация времени в американский формат и обратно
есть задача: создать класс Time, в котором реализованы операции сложения,...

конвертация RGB to CIE Lab и обратно
Пишу программу для цветокоррекции изображения. Цветокоррекция будет проводиться...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru