3

の変数を設定しようとすると、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"];
}

...

誰でも問題を解決できますか?

手伝ってくれてありがとう

4

2 に答える 2

4

ドキュメントをよく見るとdouble length、例のスカラー属性のプリミティブアクセサーメソッドが引き続きNSNumber *引数と戻り値を使用していることがわかります。

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

[注:*Appleのドキュメントの元のコードスニペットに欠けていたものを追加しました。]

NSNumber *したがって、引数と戻り値を使用してプリミティブアクセサーを宣言してみてください。

または、本当に必要な場合は、独自のプリミティブアクセサメソッドを実装することを検討してください。

于 2012-07-09T22:16:14.710 に答える
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"];
}
于 2012-07-09T22:25:20.043 に答える