创建核心数据模型设计的最佳方法是啥?
Posted
技术标签:
【中文标题】创建核心数据模型设计的最佳方法是啥?【英文标题】:What is the best way to Create a CoreData Model Desing?创建核心数据模型设计的最佳方法是什么? 【发布时间】:2014-03-29 10:41:14 【问题描述】:我只问一个模型而不是代码,或者我如何将它们添加到列表中,或者什么是正确的代码。我学会了如何向实体添加属性并获取它们。我只需要如何执行包含所有实体和属性的主列表。当我想向我展示所有实体中最喜欢的玩家时,它应该为我展示它们。..
我为我的基于数据的项目创建了一个数据模型。我应该解释一下我的项目。
我想创建一个联赛表视图,其中包含我的所有团队,用户可以在 add teams viewcontroller 中在此联赛表视图中添加团队。
我创建了两个实体,第一个实体名称是 Teams,第二个实体名称是 FavoritePlayer。
我的联赛表格视图应该在单元格文本中显示所有用户添加的团队,在单元格详细信息文本中显示最喜欢的球员 我如何使用 CoreData 来做到这一点。 我想学习 CoreData,但不想用数组或字典来做这件事。
我应该创建另一个名为 Leagues 的实体吗?如果是,我如何在没有属性的情况下做到这一点? 还是我应该使用 父实体 选项。
实际上创建数据模型的正确方法是什么?
谢谢!
--------------------- 更新问题 ------------------------
首先非常感谢stevesliva。
我必须向您解释我的项目以便轻松回答我..
我想做一个简单的用户输入数据库。我的项目将包含;
1- MainList Entity,它是我的应用程序中的主要实体和第一个场景。 MainList 实体没有任何属性。它将显示所有实体属性。它是 TableViewController 和 1 条按钮去 addList。
AddList 是一个表格视图控制器。它有 2 个静态单元格标题是票据和银行贷款。有 2 个单元格 segue 用于转到这些项目 AddViewControllers。
2-我创建了 BankLoan 和 Bill Entity。他们有attributes.String 和Number。 Bankloan 有bankName 和loanTotal Bill 有 billName 和 billTotal
他们有 AddViewControllers 将这些数据添加到他们的实体。
CoreData 模型;
MainList 与 bankLoan 和 Bill 有二对多的有序关系 bankloan 和 bill 1 To One 与 MainList 实体的关系,当然还有相反的关系。我从 Xcode 编辑器菜单创建了 2 个自定义 NSManagedObject 类。
MainList 自定义类有 2 个 NSOrderedSet。
@property (nonatomic, retain) NSOrderedSet *bills;
@property (nonatomic, retain) NSOrderedSet *bankLoans;
现在有我的问题;
1-我无法获取 managedObjectContext 所有实体项。我只能获取空的 mainList 实体。而且我无法创建 FetchResultsController,因为 fetchResultsController 需要 sortDescriptor。我也无法创建排序描述符,因为我在 MainList 中没有任何属性。这是第一个问题。
2- 如果我将所有属性添加到 NSOrderedSet,我如何使用 SQLLite 代码获取数据。exp: LIKE,[c] >== 或
使用 Core data 创建这个项目的最佳方式是什么?
遇到这种情况你会怎么做?
感谢您的关注和所有回答。你对我很有帮助。
【问题讨论】:
可以想象一个singleton可能与您相关。如果您刚刚进入工程领域,请从您的技能组合开始,享受 感谢您的评论。我会研究单身人士,但你能告诉我一个可以做到这一点的想法吗?因为单例是一个巨大的概念,我不能在短时间内学会它。 请有人帮我做这件事? 大家都在哪里?人们不回答我的问题是什么? @leonthegosu 首先,您在这里寻求免费帮助。当人们不自愿花时间回答您的问题时变得不耐烦不会获得太多同情,实际上会导致一些人根本无视您。其次,也许您应该编辑您的问题,使其更有意义。正如它所写的那样,我什至无法弄清楚你在问什么。也许我并不孤单。 【参考方案1】:创建团队实体。 创建玩家实体。
如果你想要一个联赛实体,它与球队有一对多的关系。以及从球队到联赛的一对一。 League 不会是球队的“父母”,因为球队不是联赛的子类。如果您想在核心数据中跟踪联赛,您应该创建一个联赛实体。如果您不希望联赛有任何属性,那么他们可以只与球队建立关系,但是您不会将任何其他信息(例如联赛名称)保存到持久存储中。
在团队与玩家之间建立一对多的关系。 建立球员与球队之间的关系。
为您希望与每个实体关联的信息创建属性。
这就是创建数据模型的方式。
然后,创建 UITableViewController 的子类。让它成为您的 UITableView 实例的委托和数据源。让它实现你需要的函数,从托管对象上下文中获取和修改。
或者,您可以让 UITableViewController 子类使用单例 teamManager 或 playerManager 或 任何东西。这是一篇关于单身“经理”的博文: http://www.galloway.me.uk/tutorials/singleton-classes/
我相信这可以回答你所有的问题。
哦。除了“为什么人们不想回答我”。
不清楚您的问题是什么。不清楚您是否仅询问哪种数据模型最好,如果是,也不清楚您不了解什么。我们需要一些已知的未知数。
堆栈溢出非常适合回答特定问题。它不是按需教程的地方。您可能会找到 几十个 core-data-to-tableview 教程。您应该先阅读这些内容。
【讨论】:
感谢您的回答对我非常有用。我用你的答案创建了一个数据模型。但我想知道我可以从 League Entity 获取所有实体属性(如球队名称和球员姓名)吗?因为我想在我的主 tableview 控制器中列出它们。有我的模型 postimg.org/image/whb2y0d2z 再次感谢您的兴趣.. . 获取单个联赛实体后,玩家关系就是一个 NSSet。你不需要取什么。它只是 NSSet *playerSet = myLeague.players。但是,如果您想在表格中显示,您可能需要对关系进行排序。因此,在 to-many 关系玩家上检查“Ordered”,您将获得 myLeague.players 的 NSOrderedSet。然后您可以按行或其他方式使用索引。你会使用 fetch 来做一些事情,比如获取所有联赛,或者所有球员,不管联赛,或者所有超过某个年龄的球员...... 我无法创建联盟实体。我按照你的指示,我 coreData 在我的 Teams.h 文件中创建了 NSOrderedSet,我将此代码写入我的 SaveButton 方法[_addTeamToLeague.League setValue:_teamname.text forKey:@"teamName"];
,然后我使用 objectAtIndex 将 Teams 文件中的 NSOrdered 集调用到我的 tableview 中。它返回 0 索引。怎么了 ?谢谢!
对不起,我不确定你在问什么——代码 sn-p 没有足够的上下文——尽管它再次扩大了你原来问题的范围,这有点糟糕因为你甚至没有接受我对你前几个问题的回答。
好的。要将球队添加到联赛,您只需获取联赛球队 NSOrderedSet,将球队对象添加到该集合,并将该集合分配给联赛球队 NSOrderedSet: NSMutableOrderedSet *teamSet = [myLeague.teams mutableCopy]; [teamSet addObject:myTeam atIndex:teamSet.count]; myLeague.teams = teamSet;以上是关于创建核心数据模型设计的最佳方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章
数据库设计模型实体关系图n实体与1:m实体的关系 - 最佳实践