0

我有ArticleCategory实体具有多对多关系。Category有 aname和 a imagePath(保留其名称和该类别图标图像的路径)。

使用这个模型,我可以显示文章所属的类别名称(和类别的图像)。

问题

如果我想让用户更改类别图像(例如使用新图标包更改主题)我应该怎么做?

我现在在想的是创建单独的实体,ThemeItem称为categoryIdimagePathCategoryThemeItem

Article <<------------>> Category  
- text                   - categoryId
                         - name
- categories(Relation)   - articles(Relation

Theme   <-->> ThemeItem
-themeId      -categoryId
-themeName    -imagePath
              -theme(Relation)

使用这种方法,我将继续让用户通过设置界面选择主题并themeId保持NSUserDefaults

有什么我应该关心的,或者有更好的方法来做这种事情吗?

检索图像

有了新模型,我只是从那里得到categoryIdCategory,所以我必须抬头ThemeItem才能得到imagePath。这是NSPredicate我想到的一些

NSEntityDescription *entityDescription = [NSEntityDescription entityForName:@"ThemeItem" inManagedObjectContext:moc];
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:entityDescription];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"categoryId == %@ AND theme.themeId = %@", category_id_for_article, theme_id_from_user_defaults];
[request setPredicate:predicate];

有了这个谓词,我得到了ThemeItemimagePath

4

1 回答 1

0

如果我理解您的问题,您需要获取ThemeItem属于特定主题(在用户设置中选择的主题)和当前Category. 这样对吗?

如果是这样,那么您就在正确的轨道上。您正在执行的查询没问题。

现在,在我看来,如果你删除 aTheme和它的ThemeItem. 在这种情况下,您可以拥有一个Category未“链接”到任何ThemeItem. 换句话说,为此Category你没有ThemeItem.

在这里你有两个选择。

1)手动删除Categorie不再与a链接的sThemeItem

ThemeItem2)或在和Category(您不再需要a )之间创建关系(我想是一对多categoryId)。FromThemeItem使用CategoryCascade Rule 并使用 Nullify 作为逆。当您删除时,也ThemeItemCategory被删除。由于级联规则如果管理不当是危险的(它们可以删除整个数据库),您需要测试它们的行为方式。

希望能帮助到你。

编辑

如果需要,您可以在ThemeItem和之间创建关系Category。例如调用它categories

您的模型可能如下所示:

ThemeItem                   Category
- categories (rel)  <-->>   - themeItem (inverse rel)

关系是与级联规则categories的一对多关系。与无效规则是一对一的反比关系。CategorythemeItemThemeItem

当你删除一个ThemeItem对象时,Categories 对象也会被删除。相反,当您删除 a 时CategoryThemeItem对象(与 that 链接的对象Category)会删除其子项的特定Category表单。

通过这种方式,您可以避免在模型中维护图形完整性。

显然,在这种情况下,这些新关系可以应用于您的模型:

  • 用户删除 aThemeItem并且您想删除Category与它链接的 s
  • aCategory属于特定的ThemeItem;换句话说,每一个Category都包含在一个特定的ThemeItem

我建议您阅读有关Core Data Programming Guide 的关系

注意:没有创建模型的正确方法。在我看来,处理 Core Data 时最重要的主要方面是性能。当你使用 Core Data 时,你处理的是对象而不是行数据。说这个,让你的模型适应这个方面。

我希望这个答案能让您决定适合您问题的正确模型。干杯。

于 2012-05-16T15:50:38.127 回答