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

Программирование iOS/iPhone

Войти
Регистрация
Восстановить пароль
 
Noobass
0 / 0 / 0
Регистрация: 15.10.2012
Сообщений: 100
#1

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

05.06.2013, 16:18. Просмотров 642. Ответов 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):

Массив int8_t или NSData? - Objective-C
Кто что чаще используете? масив int8_t или NSData, вопрос не в том что правильно использовать))) а что чаще всего используете вы ?

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

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

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

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

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

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

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

используйте NS типы для хранения данных (NSMutableArray, NSMutableDictionary, NSString и прочие)
1
Noobass
0 / 0 / 0
Регистрация: 15.10.2012
Сообщений: 100
06.06.2013, 12:53  [ТС] #3
Alex_pac, я это понимаю, но тогда подскажите мне, как мне "собрать" все спрайты слоя в массив? Не просто перечень их, а именно сделать массив спрайтов, которые я смогу достать из nsuserdefaults, когда мне понадобится
0
Alex_pac
1284 / 690 / 8
Регистрация: 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 и обратно - C#
Добрый день! Подскажите, как конвертировать Point в String и обратно? Добавлено через 10 минут Только так? Point point = new...

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

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

Конвертация числа в строку и обратно, условие исключения, разность. - C++
Здравствуйте! Проблема с задачей: В четырёхзначном числе все цифры разные и отличны от нуля. если его записать в обратном порядке, ...


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

Или воспользуйтесь поиском по форуму:
4
Yandex
Объявления
06.06.2013, 14:00
Ответ Создать тему
Опции темы

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