核心数据模型中反向一对多关系的自动生成代码 [英] Auto-generated code for inverse 1-to-many relationship in core data model

查看:122
本文介绍了核心数据模型中反向一对多关系的自动生成代码的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已在核心数据模型中创建了两个实体(本例中的Courier和Occupation),并在它们之间创建了一个反向关系,这也导致了 crush in xcode

I've created two entities in core data model (Courier and Occupation in this example), and created an inverse relationship between them, which also caused a crush in xcode. After that, I've set the relationship as one courier to many occupations and created classes.

职业类创建为空,但信使类填充了以下代码:

The occupation class was created empty, but courier class was populated with following code:

- (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. 它是否保证这个模型的一致性?

  3. 为什么职业类是空的?
  4. $ b(我知道它应该,但是在崩溃后我不知道xcode的逻辑是否正确) $ b
  1. What exactly does it do?
  2. Does it guarantee consistency of this model? (I know it should, but after the crash I'm not sure if xcode's logic in generating this code was correct).
  3. Why was occupation class created empty?


推荐答案



  1. 如果我理解这个问题,创建的方法是将职业添加到快递的唯一方法。因为你不能创建一个标准的NSSet,添加职业,然后添加NSSet到Courier,你会得到一个错误。

  1. What exactly does it do? If I understood this question, the methods created are the only way to add Occupations to courier. Because you cannot for example create a standard NSSet, add occupations to it and then add NSSet to Courier, you will get an error.

保证这个模型的一致性?(我知道它应该,但崩溃后我不知道如果xcode的逻辑生成这个代码是正确的)。
每次对上下文所做的更改都不会保存,直到显式调用相关方法,因此是,应该是一致的。

Does it guarantee consistency of this model? (I know it should, but after the crash I'm not sure if xcode's logic in generating this code was correct). Every change you made to the context is not saved until you explicitly call the relevant method, so yes, should be consistent. Beware that if you change the xcdatamodel, you will have to update or delete the sqllite file created before.

为什么职业类创建为空?

Why was occupation class created empty? If it is really empty there's something wrong. But probably it is not empty, it should have at least the attributes, then an attribute of type Courier which is your inverse relationship. In the implementation Occupation.m you should find lot of @dynamic , which tell the compilers to pass by because at run time a correct implementation will be provided.

这篇关于核心数据模型中反向一对多关系的自动生成代码的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆