Можно ли хранить блок внутри NSManagedObject?

Я хочу сохранить блок внутри основных данных NSManagedObject, если это возможно. У меня есть унаследованный класс от NSManagedObject. Этот класс имеет блок для выполнения некоторых асинхронных вызовов. Я попытался сохранить блок как атрибут Transformable и Transient. когда я пытаюсь вызвать блок перед загрузкой моего NSManagedObject, у меня плохой доступ к памяти "EXC_BAD_ACCESS".

Если я не проверяю флаг преобразования, у меня возникает исключение, похожее на это:

-[__NSStackBlock__ encodeWithCoder:]: unrecognized selector sent to instance 0xbfffd930

Я новичок в iOS. Я работаю под iOS 5 SDK с включенным ARC. Это выдержка из моего кода:

#import <Foundation/Foundation.h>
#import <CoreData/CoreData.h>

@class ModbusRegister, Board;
typedef void (^DataBlockType)(NSArray *listRegister);

@interface EnergyEntry : NSManagedObject
- (void)invokeWithData: (NSArray *)listRegister;

@property (nonatomic, copy) DataBlockType  datablock;

@end

#import "EnergyEntry.h"

@implementation EnergyEntry

@dynamic datablock;

- (void)invokeWithData: (NSArray *)listRegister{

    self.datablock(listRegister);
}

@end

Когда я пытался сохранить блок:

[energyEntry setValue:@"Energía activa" forKey:@"name"];
[energyEntry setValue:[NSNumber numberWithDouble:0] forKey:@"value"];
[energyEntry setValue:currentBoard forKey:@"board"];

[energyEntry setValue:^(NSArray *listRegister){
    //...my block operations to store
} forKey:@"datablock"];

Наконец, когда я вызываю блок и возникает ошибка:

NSArray *listRegister=... //my ready array
[energyEntry invokeWithData:listRegister];
5
задан Cœur 16 March 2017 в 16:38
поделиться