当我尝试设置eventId
的变量NSManagedObject (Event)
时,我得到了错误EXC_BAD_ACCESS
。
我不知道原因。
以下是我的班级Event
@interface Event : NSManagedObject
@property (assign) NSInteger eventId;
@end
@interface Event (PrimitiveAccessors)
- (NSInteger)primitiveEventId;
- (void)setPrimitiveEventId:(NSInteger)event_id;
@end
@implementation Event
@dynamic eventId;
...
-(NSInteger)eventId
{
[self willAccessValueForKey:@"eventId"];
NSInteger id = [self eventId];
[self didAccessValueForKey:@"eventId"];
return id;
}
-(void)setEventId:(NSInteger)event_id
{
[self willChangeValueForKey:@"eventId"];
[self setPrimitiveEventId:event_id]; //Here I get the error
[self didChangeValueForKey:@"eventId"];
}
...
任何人都可以解决问题吗?
感谢您的帮助
答案 0 :(得分:4)
如果仔细查看the documentation,您会看到示例中标量属性double length
的原始访问器方法仍使用NSNumber *
参数并返回值:
@interface MyManagedObject (PrimitiveAccessors)
@property (nonatomic, retain) NSNumber *primitiveLength;
@end
[注意:我在Apple的文档中添加了原始代码段中缺少的*
。]
因此尝试使用NSNumber *
参数声明原始访问器并返回值。
或者,如果你真的必须,请考虑implementing your own primitive accessor methods。
答案 1 :(得分:0)
解决方案:
@interface Event (PrimitiveAccessors)
- (NSNumber *)primitiveEventId;
- (void)setPrimitiveEventId:(NSNumber*)event_id;
@end
-(NSInteger)eventId
{
[self willAccessValueForKey:@"eventId"];
NSNumber *id = [self primitiveEventId];
[self didAccessValueForKey:@"eventId"];
return [id integerValue];
}
-(void)setEventId:(NSInteger)event_id
{
[self willChangeValueForKey:@"eventId"];
[self setPrimitiveEventId:[NSNumber numberWithInteger:event_id]];
[self didChangeValueForKey:@"eventId"];
}