2012-07-09 131 views
3

当我尝试设置我的NSManagedObject (Event)的变量eventId我得到它的错误EXC_BAD_ACCESS。 我不知道原因。核心数据setPrimitive-setter导致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"]; 
} 

... 

任何人都可以解决问题的代码?

感谢您的帮助

回答

4

如果您在the documentation仔细一看,你会看到,在示例中的原始存取方法标属性double length仍然使用NSNumber *参数和返回值:

@interface MyManagedObject (PrimitiveAccessors) 
@property (nonatomic, retain) NSNumber *primitiveLength; 
@end 

[注意:我添加了*,这是苹果公司文档中原始代码片段中缺少的。]

因此,请尝试声明您的原始访问器wi第NSNumber *个参数和返回值。

或者如果您真的必须考虑implementing your own primitive accessor methods

+0

你是对的......我对我们的NSNumber *。解决方案在我的答案 – 2012-07-09 22:24:19

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"]; 
} 
相关问题