При подключении определенного метода передается параметр, который является NSMallocBlock. Мне нужно сохранить это значение, чтобы использовать его позже при вызове метода из моего кода. Я попытался сохранить его как пользовательский по умолчанию, но это привело к сбою программы. Есть ли способ сохранить объект или воссоздать его позже?





По умолчанию блоки не могу сохраняются.
@interface AwesomeClass : NSObject
@property (nonatomic, copy, nullability) returnType (^blockName)(parameterTypes);
@end
(синтаксис блока через Как объявить блок в Objective-C?)
Это позволит вам сохранить ссылку на ваш блок для последующего выполнения вашей программы. Обратите внимание, что вы всегда должны использовать copy, так как большинство блоков инициализируются в стеке. Если вы этого не сделаете, случатся странные вещи.
Кстати, NSUserDefaults предназначен для хранения небольших объемов данных между выполнениями вашей программы. -[NSUserDefaults setObject:forKey:] поддерживает только NSData, NSString, NSNumber, NSDate, NSArray или NSDictionary. Обычно он вылетает, если вы пытаетесь установить его для любого другого типа объекта. Более подробную информацию можно найти здесь: setObject: forKey: - NSUserDefaults | Документация для разработчиков Apple.
@RobNapier - очень хорошее замечание. Я изменил порядок поста, чтобы прояснить это (надеюсь).
Чтобы быть предельно ясным по поводу этого ответа: блоки не могут быть сохранены. (Сказать «изначально» предполагает, что есть какой-то «неродной» способ сделать это, но его нет. Блоки не могут быть сохранены.)