核心数据模型中反向1对多关系的自动生成代码

时间:2011-07-27 18:28:36

标签: xcode core-data model xcode4

我在核心数据模型中创建了两个实体(本例中为Courier和Occupation),并在它们之间创建了一个反比关系,这也导致了crush in xcode。在那之后,我将这种关系设置为许多职业的一个快递,并创建了课程。

占用类是空的,但是courier类填充了以下代码:

- (void)addOccupationsObject:(NSManagedObject *)value {    
    NSSet *changedObjects = [[NSSet alloc] initWithObjects:&value count:1];
    [self willChangeValueForKey:@"occupations" withSetMutation:NSKeyValueUnionSetMutation usingObjects:changedObjects];
    [[self primitiveValueForKey:@"occupations"] addObject:value];
    [self didChangeValueForKey:@"occupations" withSetMutation:NSKeyValueUnionSetMutation usingObjects:changedObjects];
    [changedObjects release];
}

- (void)removeOccupationsObject:(NSManagedObject *)value {
    NSSet *changedObjects = [[NSSet alloc] initWithObjects:&value count:1];
    [self willChangeValueForKey:@"occupations" withSetMutation:NSKeyValueMinusSetMutation usingObjects:changedObjects];
    [[self primitiveValueForKey:@"occupations"] removeObject:value];
    [self didChangeValueForKey:@"occupations" withSetMutation:NSKeyValueMinusSetMutation usingObjects:changedObjects];
    [changedObjects release];
}

- (void)addOccupations:(NSSet *)value {    
    [self willChangeValueForKey:@"occupations" withSetMutation:NSKeyValueUnionSetMutation usingObjects:value];
    [[self primitiveValueForKey:@"occupations"] unionSet:value];
    [self didChangeValueForKey:@"occupations" withSetMutation:NSKeyValueUnionSetMutation usingObjects:value];
}

- (void)removeOccupations:(NSSet *)value {
    [self willChangeValueForKey:@"occupations" withSetMutation:NSKeyValueMinusSetMutation usingObjects:value];
    [[self primitiveValueForKey:@"occupations"] minusSet:value];
    [self didChangeValueForKey:@"occupations" withSetMutation:NSKeyValueMinusSetMutation usingObjects:value];
}

我有两个问题:

  1. 它到底是做什么用的?
  2. 是否保证此型号的一致性? (我知道它应该,但在崩溃后我不确定xcode生成此代码的逻辑是否正确)。
  3. 为什么职业阶层被设为空?

1 个答案:

答案 0 :(得分:1)

  1. 它究竟做了什么? 如果我理解了这个问题,创建的方法是将职业添加到快递的唯一方法。因为您无法创建标准NSSet,向其添加职业,然后将NSSet添加到Courier,您将收到错误。

  2. 它是否保证了这个模型的一致性?(我知道它应该,但是在崩溃之后我不确定xcode生成这个代码的逻辑是否正确)。 在您明确调用相关方法之前,您对上下文所做的每个更改都不会保存,所以是的,应该是一致的。请注意,如果更改xcdatamodel,则必须更新或删除之前创建的sqllite文件。

  3. 为什么职业类是空的? 如果它真的是空的,那就错了。但可能它不是空的,它应该至少具有属性,然后是Courier类型的属性,这是你的反向关系。在实现Occupation.m中你应该找到很多@dynamic,告诉编译器通过,因为在运行时会提供正确的实现。