Форум программистов, компьютерный форум CyberForum.ru

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

Войти
Регистрация
Восстановить пароль
 
Noobass
0 / 0 / 0
Регистрация: 15.10.2012
Сообщений: 100
05.06.2013, 16:18     Конвертация массива в NSData и обратно #1
Ребят, я тут с 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 в массив???
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.06.2013, 16:18     Конвертация массива в NSData и обратно
Посмотрите здесь:

NSData как освободить память Objective-C
Конвертация строк
Передача данных с клиента на сервер и обратно Objective-C
Objective-C Как преобразовать число в строку и обратно
Массив int8_t или NSData? Objective-C

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Alex_pac
 Аватар для Alex_pac
1281 / 687 / 8
Регистрация: 25.05.2011
Сообщений: 2,158
Записей в блоге: 51
06.06.2013, 08:35     Конвертация массива в NSData и обратно #2
СОбрать спрайты со слоя, сохранить их в базе
если мне память не изменяет, то CCLayer не относится к "безопасным типам" типа NS типов которые успешно сериализуются

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

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

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

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

и значит для сериализации надо написать свой алгоритм который будет транслировать параметры ССlayer в NSDictionary и обратно, а иначе никак.
Yandex
Объявления
06.06.2013, 14:00     Конвертация массива в NSData и обратно
Ответ Создать тему
Опции темы

Текущее время: 20:38. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru