Сбой UIColor при попытке заархивировать объект UIColor - PullRequest
0 голосов
/ 19 сентября 2011

Объект UIColor, созданный с изображением шаблона, будет надежно падать при попытке заархивировать этот объект.

UIColor *patternColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"test.png"]];
[NSKeyedArchiver archiveRootObject:patternColor toFile:[NSHomeDirectory() stringByAppendingFormat:@"/archive"]];

Ответы [ 2 ]

2 голосов
/ 23 сентября 2011

Повторное размещение моего предыдущего комментария в качестве ответа на предложение @deanWombourne ...

У меня была такая же проблема. Выложил более четкое объяснение здесь ...

Сохранение UIColor colorWithPatternImage: изображение UIColor в базовые данные с использованием NSKeyedArchiver

1 голос
/ 19 сентября 2011

ОК, вторая попытка - я удалил свою первую.

@ Одри - вам нужно опубликовать трассировку исключений консоли в своем вопросе - это действительно очень полезно и предотвратило бы последние 10 минут обсуждения в комментариях.

Я создал тестовое приложение с вашим кодом (кроме метода swizzling, который, как вы настаиваете, не имеет ничего общего с проблемой, но не покажет нам), и он вылетает.

Тем не менее, он говорит мне, почему:

2011-09-19 12:51:10.346 test[50884:40b] *** Assertion failure in -[UICGColor encodeWithCoder:], /SourceCache/UIKit_Sim/UIKit-1448.89/UIColor.m:894
2011-09-19 12:51:10.447 test[50884:40b] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Only support RGBA or the White color space, this method is a hack.'

Вы можете сериализовать только определенные объекты UIColor.

Вместо того, чтобы сериализовать UIColor, вам нужно сохранить изображение, из которого был создан шаблон. Сделайте это в вашем encodeWithCoder:

Затем в вашем initWithCoder: вы должны разархивировать образ и создать из него новый UIColor.


Хотя, чтобы быть совершенно ясным, я не могу сказать, является ли это той же самой аварией, которую вы видите. Без каких-либо сообщений об ошибках этот ответ является лишь предположением. Пожалуйста, постарайтесь быть полезным; люди просили дополнительную информацию, и вы, похоже, неохотно ее предоставляете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...