У меня есть простое приложение для iphone, которое рисует блоки, используя подкласс CALayer, и пытаюсь найти лучший способ сохранить состояние или сохранить текущие созданные слои.
Я попытался использовать ответ Брэда Ларсона из этого предыдущего вопроса о хранении пользовательских объектов в NSUserDefaults, который работал для сохранения моего подкласса CALayer, но не в его базовом состоянии, как геометрия и цвет фона, там, но не сделал на повторный запуск.
Я сделал мои объявленные переменные экземпляра соответствующими протоколу NSCoding, но не знаю, как заставить свойства CALayer делать то же самое без повторного объявления всех его свойств. Или это не правильный / лучший подход вообще?
Вот код, который я использую для архивации массива слоев:
[[NSUserDefaults standardUserDefaults] setObject:[NSKeyedArchiver archivedDataWithRootObject:viewController.view.layer.sublayers] forKey:@"savedArray"];
А вот код, который я использую для перезагрузки своих слоев в -viewDidLoad:
NSUserDefaults *currentDefaults = [NSUserDefaults standardUserDefaults];
NSData *dataRepresentingSavedArray = [currentDefaults objectForKey:@"savedArray"];
if (dataRepresentingSavedArray != nil) {
[self restoreStateWithData:dataRepresentingSavedArray];
И в -restoreStateWithData:
NSArray *savedLayers = [NSKeyedUnarchiver unarchiveObjectWithData:data];
if (savedLayers != nil) {
for(layer in savedLayers) {
[self.view.layer addSublayer:layer];
}
[spaceView.layer layoutSublayers];
}