2012-07-09 43 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"]; 
}