【发布时间】:2011-08-22 18:38:26
【问题描述】:
我目前正在为 iPhone 开发我的第一个 Core Data 项目。在进行了一些实验之后,我对核心数据中的实体关系有一些相当基本的问题。
假设我有两个实体:事件和位置。他们每个人都有一个名称属性。一个事件只能有一个位置,而一个位置可以有多个事件。所以关系应该是这样的:
Event <<--> Location
在我的项目中,我(用户)可以输入事件的名称及其位置。然后我根据该输入为 Event 实体创建一个新对象。我通过像这样访问事件的关系来设置位置的名称:
event.Location.name = someCustomString;
保存工作正常。我想。
我的第一个问题是:
Core Data 是否每次我这样做时都会为 Location 实体创建一个新对象 - 即使之前使用过相同的 Location 名称(并且仍然存储)?或者在这种情况下,核心位置是否自动仅将关系设置为现有的位置对象?因为对于我的项目,有必要识别发生在同一地点的事件。
这也引出了我的下一个问题:
如果删除一个 Event 对象呢?当我这样做时,我必须检查相应的位置是否被多个事件使用。如果是,我将取消关系但保留 Location 对象。如果没有,我也必须删除 Location 对象。我目前的方法(基于我假设同名的位置不会被双重保存)如下所示:
Event *event = (event *)[appManager.results.fetchedObjects objectAtIndex:indexPath.row];
NSInteger locationEvents = 0;
for (Event *eve in appManager.results.fetchedObjects)
{
if (eve.Location.name == event.Location.name)
{
locationMoments++;
}
}
if (locationMoments == 1)
{
[appManager.managedObjectContext deleteObject:event.Location];
}
[appManager.managedObjectContext deleteObject:event];
所以至少我认为我正在检查某个 Location 对象所引用的事件数量。但是代码感觉有点痒......我不知道这是否是正确的方法。所以我的最后一个问题是: 在我的场景中,标准程序是什么?如果有的话。 ;)
提前谢谢大家的回答!!
【问题讨论】:
标签: iphone objective-c ios xcode core-data