Кодирование блока Objective-c?

Можно ли закодировать блок Objective-C с помощью NSKeyedArchiver?

Я не думаю, что объект Block соответствует NSCoding, поэтому [coder encodeObject:block forKey:@"block"] не работает?

Есть идеи?


person rebo    schedule 31.01.2010    source источник


Ответы (1)


person    schedule
comment
Спасибо за ответ, я думаю, что понимаю, почему просто кодировать их непросто. Однако я смущен вашим предложением использовать класс для хранения состояния, используемого блоками. Не могли бы вы рассказать, как это реализовать? В моей ситуации у меня есть базовые блоки обратного вызова void, т.е. void^{ do_stuff; }. Спасибо! - person rebo; 31.01.2010
comment
Противоречит интуиции тот факт, что блок может легко быть переменной экземпляра... но не может быть разархивирован/разархивирован. Под противоречащим здравому смыслу я имею в виду хромой. Проголосовал за то, что это единственный ответ, с оговоркой, что я предполагаю, что действительно есть способ ... каким-то образом, где-то. - person Alex Gray; 20.12.2013
comment
@alexgray Тонны объектов могут быть переменными экземпляра, которые нельзя заархивировать/разархивировать (каждый класс, который не поддерживает NSCopying). И что бы это вообще значило, если бы блок был архивируемым? Должны ли все захваченные объекты также архивироваться? Что, если он захватит случайную структуру? Это тоже нужно заархивировать? Как насчет зависимостей архитектуры/порядка байтов? Они автоматически обрабатываются API архиватора. Должны ли блоки затем расширять возможности реализации пользовательского архивирования? Помимо того, что это кошмар в обслуживании, это было бы очень сложно поддерживать в комплекте (с небольшой рентабельностью инвестиций). - person bbum; 20.12.2013