取得とObjective-Cでのコアデータ要素から値を設定しますか?
-
13-09-2019 - |
質問
私は2つのエンティティを持つ単純なアプリケーションを持っています
個人ます:
Attributes:
name
Relationships:
nativeLanguage: (<<-> Language.natives)
nonNativeLanguage: (<<-> Language.nonNatives)
言語:
Attributes:
name
Relationships:
natives: (<->> Person.nativeLanguage)
nonNatives: (<->> Person.nonNativeLanguage)
人々のための編集画面では、私は彼らが別の言語とに新しい言語を追加するためのボタンを選択するためのドロップボックスと一緒に、人のためにリストされている非ネイティブ言語のリストを表示するために設定されたテーブルの表示を持っています一覧ます。
私の目標は、次のように関数を作成することです。
- (IBAction)addNonNativeLanguage:(id)sender {
// tack the language to the end of the list on a many-many relationship
PersonEntry.nonNativeLanaguages = PersonEntry.nonNativeLanguages + sender;
}
ボタンにアクションを添付。トリックは、私は通常の変数を割り当て、変更する方法を知っている間、私はInterface Builderの外コアデータの内容を変更する方法が分からない、です。私は、Objective-Cでそれを行うことができますどのように?
解決
私のすべてのコアデータモデルのエンティティクラスでは、Iは対多関係の操作のための次のコードを持っています
- (void)addNatives:(NSSet*)value_ {
[self willChangeValueForKey:@"natives" withSetMutation:NSKeyValueUnionSetMutation usingObjects:value_];
[[self primitiveValueForKey:@"natives"] unionSet:value_];
[self didChangeValueForKey:@"natives" withSetMutation:NSKeyValueUnionSetMutation usingObjects:value_];
}
-(void)removeNatives:(NSSet*)value_ {
[self willChangeValueForKey:@"natives" withSetMutation:NSKeyValueMinusSetMutation usingObjects:value_];
[[self primitiveValueForKey:@"natives"] minusSet:value_];
[self didChangeValueForKey:@"natives" withSetMutation:NSKeyValueMinusSetMutation usingObjects:value_];
}
- (void)addNativesObject:(Person*)value_ {
NSSet *changedObjects = [[NSSet alloc] initWithObjects:&value_ count:1];
[self willChangeValueForKey:@"natives" withSetMutation:NSKeyValueUnionSetMutation usingObjects:changedObjects];
[[self primitiveValueForKey:@"natives"] addObject:value_];
[self didChangeValueForKey:@"natives" withSetMutation:NSKeyValueUnionSetMutation usingObjects:changedObjects];
[changedObjects release];
}
- (void)removeNativesObject:(Person*)value_ {
NSSet *changedObjects = [[NSSet alloc] initWithObjects:&value_ count:1];
[self willChangeValueForKey:@"natives" withSetMutation:NSKeyValueMinusSetMutation usingObjects:changedObjects];
[[self primitiveValueForKey:@"natives"] removeObject:value_];
[self didChangeValueForKey:@"natives" withSetMutation:NSKeyValueMinusSetMutation usingObjects:changedObjects];
[changedObjects release];
}
- (NSMutableSet*)nativesSet {
[self willAccessValueForKey:@"natives"];
NSMutableSet *result = [self mutableSetValueForKey:@"natives"];
[self didAccessValueForKey:@"natives"];
return result;
}
このテンプレートコードはウルフRentzschの非常に優れた mogeneratorする(ごとに自動的に保存する時に、それを適切に生成します)データモデルのます。
また、対多の関係のためのコアデータのバックエンドは順不同であることに注意してください。あなたがあなたのデータに秩序を維持したい場合は、それを自分で行う必要があります。
他のヒント
あなたは、まずあなたが欲しいmanagedObjectインスタンス/レコードを検索する必要があります。迅速かつ汚い方法は、それが持っているオブジェクト人物オブジェクトを表示しているインタフェース要素を依頼することです。
あなたがオブジェクトを持っていたら、あなたは関係の名前でコールmutableSetValueForKey:
を使用しています。これはあなたのすべての関連langugesの変更可能なセットを提供します。その後、適切な言語のオブジェクトを取得し、標準NSMutableSet方法を使用してセットに追加します。