0

エンティティのセット(1対多の関係)LogBookの属性(と呼ばれる)を持つと呼ばれるエンティティがあります。columnsLogBookColumn

可変の列のセットを取得するために私が見る標準的な方法は次のようです。

NSEntityDescription *myLogbook;
myLogbook = [NSEntityDescription insertNewObjectForEntityForName:@"LogBook"
                                          inManagedObjectContext:self.managedObjectContext];
NSMutableSet *columns = [myLogbook mutableSetValueForKey:@"columns"];

3行目のメソッドの代わりに、ドット表記を使用したいと思います。そのために、andとも呼ばれるクラス定義LogBookLogBookColumn作成し、@propertyを使用してセッターとゲッターを作成しました。

LogBook *myLogBook;
myLogbook = [NSEntityDescription insertNewObjectForEntityForName:@"LogBook"
                                          inManagedObjectContext:self.managedObjectContext];
NSMutableSet *columns = (NSMutableSet *)myLogbook.columns;

それで、columns本当にデフォルトで可変セットですか?確認するために2つのことを行いました。

  • リストへの書き込みを試みました。例:[columns addObject:aColumn];
  • 質問:BOOL isKindOfMutableSet = [myLogbook.columns isKindOfClass:[NSMutableSet class]];

どちらも期待どおりの結果で機能するため、この質問はやり過ぎになる可能性がありますが、追跡が困難なメモリエラーについて非常に心配しています。また、これを可変セットとして定義したので、質問isKindOfClassが機能するかどうか疑問に思います。したがって、基盤となるメモリ組織が可変セットをサポートしていなくても機能しませんか?

上記のすべての要約は次のとおりです。これは、columnsプロパティ/属性にアクセスして変更するための正しい方法ですか?

4

1 に答える 1

1

このドキュメントによると、to-many関係はとして宣言する必要がNSSetあります。これは理にかなっています。属性がを返したとしても、を更新すると関係が適切NSMutableSetに更新されるとは限りません(これはそうします)。NSMutableSetmutableSetValueForKey:

本当に変更可能なアクセサーが必要な場合はreadonly、ラップするプロパティを作成するだけですmutableSetValueForKey:

アップデート:

それ以外の場合は、-(void)addLogBookColumnsObject:(LogBookColumn *)value;、-(void)removeLogBookColumnsObject:(LogBookColumn *)value;、-(void)addLogBookColumns:(NSSet *)values;、-(void)を使用することになっています。 removeLogBookColumns:(NSSet *)values; それは私たちのためにコアデータによって生成されました。

于 2013-01-23T03:15:24.140 に答える