私のプロジェクトでは、コアデータを使用する次のような状況があります。私は、2つのBOOLプロパティisCompletedとisNonVisitを持つエンティティを持っています。 NSNumber * status - プロパティの値は、isCompleted値とisNonVisit値の両方に依存します。コアデータ:他に依存するプロパティを実装する
いずれかのBOOLプロパティが変更された場合、ステータスプロパティを自動的に実現します。
ステータスプロパティ(ソートデスクリプタおよびsectionNameKeyPath)を使用するfetchedResultsControllerを使用するため、3つのプロパティがすべて基になるデータベースに存在する必要があります。
私は、次の解決策を考え出した:.hファイルに
:.Mファイルに
@property (nonatomic, retain) NSNumber *isCompleted;
@property (nonatomic, retain) NSNumber *isNonVisit;
@property (nonatomic, retain) NSNumber *status;
- (NSNumber *)calculateStatus; //Returns proper status value based on isCompleted and nonVisit property values.
:
@dynamic isCompleted;
@dynamic isNonVisit;
@dynamic status;
- (void)setIsCompleted:(NSNumber *)newValue
{
[self willChangeValueForKey:@"isCompleted"];
[self setPrimitiveValue:newValue forKey:@"isCompleted"];
[self didChangeValueForKey:@"isCompleted"];
self.status = [self calculateStatus];
}
- (void)setIsNonVisit:(NSNumber *)newValue
{
[self willChangeValueForKey:@"isNonVisit"];
[self setPrimitiveValue:newValue forKey:@"isNonVisit"];
[self didChangeValueForKey:@"isNonVisit"];
self.status = [self calculateStatus];
}
ソリューションが動作するようです。
私の質問です。それは問題ありませんか? CoreDataまたはKVOのいくつかのルールに違反していますか?
ありがとうございます。
ありがとうございます。あなたが正しいです。しかし、isCompletedとisNonVisitを別々のフィールドに格納するのは、これらのプロパティが以前のバージョンのアプリケーションで使用されていたのに対し、statusプロパティは新しいプロパティです。だから、私は古いものを取り除きたくないのです(もちろん、それらを取り除くことは可能です)。 – manicaesar