6

NSManagedObjectセッターをオーバーライドしたいクラスがありますが、自動生成されたクラス ファイルを変更せず、代わりにカテゴリを作成して拡張することをお勧めします (モデルを変更してファイルを再生成すると、追加したものはすべて失われます)。

カテゴリでセッターのメソッドを作成すると、メソッドが確実に実行されます (NSLog でテスト済み) が、実際のプロパティ値を割り当てる方法がわかりません。通常、私はプロパティを合成します

@synthesize finished = _finished;

次のように、を使用してセッターのプロパティにアクセスできるようにします_finished

- (void)setFinished:(NSNumber *)finishedValue {
    _finished = finishedValue;
    self.end_time = [NSDate date];
}

しかし、プロパティがで定義されている場合、NSManagedObjectこれは可能ではないようです。

4

3 に答える 3

8

サブクラス化で行うことができますここでドキュメントを参照してください

- (void)setName:(NSString *)newName
{
    [self willChangeValueForKey:@"name"];
    [self setPrimitiveName:newName];
    [self didChangeValueForKey:@"name"];
}
于 2012-10-29T11:08:28.050 に答える
1

カテゴリでは、プロパティ値を追加することはできず、メソッドのみを追加できます。したがって、必要なことを実行するには、サブクラス化する必要があります。

于 2012-10-29T10:46:19.927 に答える
0

これを行う簡単な方法があります。次の方法を試してください。

Model.h

@interface Model
@property(nonatomic,copy) NSString  * string;
@end

モデル + Override.m

@interface Model ()
{
    NSString *_string;
} 
@end

@implementation Model (Override) 
- (void)setString:(NSString *)string
{
    return _string = string;
}    
@end
于 2016-08-18T09:23:13.910 に答える