Iphone 核心数据=>;添加相关对象始终为零

Iphone 核心数据=>;添加相关对象始终为零,iphone,core-data,Iphone,Core Data,我有两个相关的表:DataEntered和Model 数据输入 -当前模型 模型 一个输入的数据只能有一个模型,但一个模型可以保存在多个输入的数据中 关系是从输入的数据到模型(没有到多个关系),没有反向关系 XCode为DataEnteredModel生成setter: @property (nonatomic, retain) NSSet * current_model; - (void)addCurrent_modelObject:(CarModel *)value; - (void)ad

我有两个相关的表:DataEntered和Model

数据输入 -当前模型

模型

一个输入的数据只能有一个模型,但一个模型可以保存在多个输入的数据中

关系是从输入的数据到模型(没有到多个关系),没有反向关系

XCode为DataEnteredModel生成setter:

@property (nonatomic, retain) NSSet * current_model;

- (void)addCurrent_modelObject:(CarModel *)value;
- (void)addCurrent_model:(NSSet *)value;
我有一个表,当我选择一个模型时,我想将其存储到DataEntered:

Model *model = [fetchedResultsController objectAtIndexPath:indexPath];
NSLog(@"Model %@",model.name); // ==> gives me the correct model name
[dataEntered addCurrent_modelObject:model]; // ==> always nil
[dataEntered setCurrent_model:[fetchedResultsController objectAtIndexPath:indexPath]]; // the same, always nil
我做错了什么

谢谢

r

编辑: 你是对的,首先我有一个对多关系,XCode生成了实体代码,这就是为什么在更改relaship之后它仍然被设置为一个集合

现在我已经重新生成了实体,现在我有了如下属性:

@property (nonatomic, retain) CarModel * current_car_model;
但我还是遇到了同样的问题

现在,我添加了反向关系并重新生成了实体。两个实体都有一对一的关系。还是有同样的问题

好的,另一个尝试:从模型到数据输入的关系现在是多方面的。再次重新生成图元,现在为模型指定了:

Model *model = [fetchedResultsController objectAtIndexPath:indexPath];

[dataEntered addCurrent_modelObject:model];
最后,这两种关系对很多人来说都很重要。同样的问题也存在

但我不明白的是,为什么在这种情况下,我必须有一个相反的关系

恢复:在这种情况下,我必须如何定义我的关系

输入的数据只能有一个模型

每个模型可以关联到输入的许多数据中

在SQL数据库定义中,一个带有模型id的字段存储在输入的数据中一个简单的longint字段中就足够了。当relashion太多时,我在.sqlite数据库中看不到该字段,现在我又改为1,我可以将当前的_model字段视为整数。但是再一次,我在模型表中有一个输入了相关数据的字段,我认为这是错误的,因为我不会在这里存储任何内容

任何光线都将不胜感激

:-)

谢谢


r、

如果属性是作为集合创建的,则不会将其设置为一对一关系,而是一对多关系。因此:

@property (nonatomic, retain) NSSet * current_model;
…表示多对多关系

如果您的模型实体与输入的数据实体有关系,但尚未设置相同的互惠关系,则可能会出现问题

编辑:

我认为您的主要问题是您将核心数据视为SQL的一种形式,而事实并非如此。实体不是表。对象不是记录。核心数据是一个对象图,对象图与SQL有很大不同。首先,在核心数据中有一个孤立的对象是可能的,但在SQL中不能丢失一条记录。这就是核心数据真正想要互惠关系的原因

您不应该用SQL术语来思考,而应该将其看作是在没有核心数据的情况下从头开始创建对象图。如果您自己从头开始编写一个数据输入类和一个模型类,您将如何处理它?您将如何手动关联它们。从这个角度来看,核心数据更容易理解

我建议您选择实体名称可能会导致问题。看起来您的模型实体实际上被命名为“\u model”。苹果保留以下划线开头的符号,当然“model”很容易在核心数据内部显示,因此可能会发生名称冲突。尝试将名称更改为“CarModel”如果您喜欢下划线,请将其更改为“CarModel”

此外,“DataEntered”实体/类的名称似乎不太好。“数据输入”是一个操作,而不是一个对象。实体/类应该表示一些物理或数据对象。例如,“CustomerCar”是一个实体/类,它对汽车进行建模,而汽车又与“CarModel”实体/类具有“模型”关系


仅仅用对象图的文本描述调试核心数据是非常非常困难的,尤其是当描述图的人是新手时,(无意冒犯)。如果您可以拍摄数据模型编辑器的屏幕截图并发布它,这样我们就可以看到它,这会有所帮助

如果属性是作为集合创建的,则不会将其设置为一对一关系,而是一对多关系。因此:

@property (nonatomic, retain) NSSet * current_model;
…表示多对多关系

如果您的模型实体与输入的数据实体有关系,但尚未设置相同的互惠关系,则可能会出现问题

编辑:

我认为您的主要问题是您将核心数据视为SQL的一种形式,而事实并非如此。实体不是表。对象不是记录。核心数据是一个对象图,对象图与SQL有很大不同。首先,在核心数据中有一个孤立的对象是可能的,但在SQL中不能丢失一条记录。这就是核心数据真正想要互惠关系的原因

您不应该用SQL术语来思考,而应该将其看作是在没有核心数据的情况下从头开始创建对象图。如果您自己从头开始编写一个数据输入类和一个模型类,您将如何处理它?您将如何手动关联它们。从这个角度来看,核心数据更容易理解

我建议您选择实体名称可能会导致问题。看起来您的模型实体实际上被命名为“\u model”。苹果保留以下划线开头的符号,当然“model”很容易在核心数据内部显示,因此可能会发生名称冲突。尝试将名称更改为“CarModel”如果您喜欢下划线,请将其更改为“CarModel”

此外,“DataEntered”实体/类的名称似乎不太好。“数据输入”是一个操作,而不是一个对象。实体/类应该表示一些物理或数据对象。例如,“CustomerCar”是一个实体/类,它对汽车进行建模,而汽车又与“CarModel”实体/类具有“模型”关系

仅仅用objec的文本描述调试核心数据是非常非常困难的