获取和Objective-C中的核心数据元素设定值?
-
13-09-2019 - |
题
我有一个简单的应用程序有两个实体:
人:
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;
}
和附加作用到按钮。诀窍是,虽然我知道如何分配和修改常规变量,我不知道如何修改界面生成器之外的核心数据的内容。我怎样才能做到这一点在Objective-C?
解决方案
在所有的核心数据模型实体类,我有以下代码对多关系操作:
- (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方法集。
不隶属于 StackOverflow