我有两个相关的表:DataEntered和Model
DataEntered -currentModel
模型
一个DataEntered只能有一个Model,但Model可以保留在很多DataEntered中。
关系是从DataEntered到Model(No To Many-relathionship),没有反比关系。
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
我做错了什么?????
感谢,
河
你是对的,首先我有一个多对多的关系,而XCode生成了实体代码,这就是为什么在更改了关系之后它仍被设置为SET。
现在我重新生成了实体,现在我拥有了这样的属性:
@property (nonatomic, retain) CarModel * current_car_model;
但我仍然遇到同样的问题。
现在,我添加了反向关系并重新生成了实体。两个实体都有TO-One关系。还有同样的问题。
好的,另一个尝试:从模型到DataEntered的关系现在是To-Many。再次重新生成entites,现在为模型分配:
Model *model = [fetchedResultsController objectAtIndexPath:indexPath];
[dataEntered addCurrent_modelObject:model];
最后,这两个关系都是很多。存在同样的问题。
但我不明白为什么在这种情况下我必须有一个反比关系。
要恢复:在这种情况下我如何定义我的关系?
DataEntered只能有一个模型。
每个模型都可以与许多DataEntered相关联。
在SQL数据库定义中,具有存储在DataEntered中的简单longint字段中的模型的id的字段就足够了。当重新对比很多时,我无法在.sqlite数据库中看到该字段,现在我再次更改为To-One,我可以看到current_model字段为整数。但同样,我在Model表中有一个带有相关DataEntered的字段,我认为这是错误的,因为我不会在这里存储Nothing。
任何亮点都会受到赞赏......
: - )
谢谢.....
河
答案 0 :(得分:3)
如果您的属性是作为一个集创建的,那么您没有将其设置为一对一关系,而是设置为多对多关系。所以这个:
@property (nonatomic, retain) NSSet * current_model;
...表示多人关系。
如果您的模型实体与DataEntered实体有关系,但您没有设置相同的互惠关系,则可能会出现问题。
编辑:
我认为你的主要问题是你将Core Data视为一种SQL形式,而不是。实体不是表格。对象不是记录。核心数据是一个对象图,对象图与SQL有很大不同。首先,可以在Core Data中有一个孤立对象,但是你不能真正丢失SQL中的记录。这就是Core Data真正想要互惠关系的原因。
不要用SQL术语思考,你应该把它当作没有核心数据从头开始创建对象图。如果你自己从头开始编写一个DataEntered类和一个模型类,你将如何处理它?你会如何手动关联它们。从这个角度来看,核心数据更容易理解。
我会提供您选择的实体名称可能会导致问题。看起来你的模型实体实际上名为“_model”。 Apple保留以下划线开头的符号,“模型”当然可以很容易地在Core Data内部显示,因此您可能会发生名称冲突。如果您喜欢下划线,请尝试将名称更改为“CarModel”,将其更改为“CarModel_”。
此外,“DataEntered”实体/类似乎命名不佳。 “数据输入”是一个动作而不是一个对象。实体/类应表示一些物理或数据对象。例如,“CustomerCar”将是对汽车进行建模的实体/类,而汽车又与“CarModel”实体/类具有“模型”关系。
当描述图形的人是新手时,用对象图的文本描述来调试核心数据非常非常困难,尤其是(没有冒犯)。如果您可以拍摄数据模型编辑器的屏幕截图并发布,那么我们可以看到它会有所帮助。
答案 1 :(得分:0)
好吧,最后我发现了问题。
dataEntered是nil ............
我不习惯在没有错误的情况下为nil对象赋值......
: - )
我并不冒犯,我真的是Core Data的新手,但不是SQL,但因为我的方法不起作用,最后我四处乱窜......
谢谢,抱歉!
的问候,
河