我有一个简单的应用程序有两个实体:

人:

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方法集。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top