我在核心数据模型中创建了两个实体(本例中为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];
}
我有两个问题:
答案 0 :(得分:1)
它究竟做了什么? 如果我理解了这个问题,创建的方法是将职业添加到快递的唯一方法。因为您无法创建标准NSSet,向其添加职业,然后将NSSet添加到Courier,您将收到错误。
它是否保证了这个模型的一致性?(我知道它应该,但是在崩溃之后我不确定xcode生成这个代码的逻辑是否正确)。 在您明确调用相关方法之前,您对上下文所做的每个更改都不会保存,所以是的,应该是一致的。请注意,如果更改xcdatamodel,则必须更新或删除之前创建的sqllite文件。
为什么职业类是空的? 如果它真的是空的,那就错了。但可能它不是空的,它应该至少具有属性,然后是Courier类型的属性,这是你的反向关系。在实现Occupation.m中你应该找到很多@dynamic,告诉编译器通过,因为在运行时会提供正确的实现。