【发布时间】:2012-03-22 16:35:46
【问题描述】:
如果可能的话,我想在核心数据 NSManagedObject 中保留一个块。我有一个继承自 NSManagedObject 的类。
这个类有一个块来满足一些异步调用。我试图将块存储为 Transformable 和 Transient 属性。当我尝试在加载我的 NSManagedObject 之前调用该块时,我的内存访问不正确 "EXC_BAD_ACCESS" 。
如果我不检查可转换标志,我会遇到类似以下的异常:
-[__NSStackBlock__ encodeWithCoder:]: unrecognized selector sent to instance 0xbfffd930
我是 iOS 新手。我在启用 ARC 的 iOS 5 SDK 下工作。这是我的代码的摘录:
#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];
【问题讨论】:
标签: ios automatic-ref-counting objective-c-blocks nsmanagedobject