У меня есть простое приложение для 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];
}