【问题标题】:predicate on relationship Vs predicate on attribute which is best?关系谓词与属性谓词哪个最好?
【发布时间】:2016-08-09 13:35:49
【问题描述】:

可能已经在某个地方得到了答案,但我不觉得问这么愚蠢的问题很抱歉

实体有父子两个

我想要父母的所有孩子,然后我会使用如下谓词的关系

[NSPredicate predicateWithFormat:@"parent = %@", parent]

我将 parent_id 作为属性存储在子表中

并使用像这样的谓词

 [NSPredicate predicateWithFormat:@"parent_id = %@", parentid]

现在我的问题是哪一个可以提供击球手的表现以及如何提供? 因为我很困惑为什么我使用关系模型,因为我可以通过属性找到它

【问题讨论】:

    标签: ios core-data relationship nspredicate


    【解决方案1】:

    这两个版本都使这比它需要的复杂得多。如果您在名为parent 的变量中有Parent 的实例,则可以通过直接查找关系的值来获取每个相关的child,而无需执行提取或使用任何类型的谓词。

    NSSet *children = [parent valueForKey:@"child"];
    

    或者如果您创建了NSManagedObject 的子类来表示Parent 的实例,

    NSSet *children = parent.child;
    

    [顺便提一下,将child 引用重命名为children 可能是个好主意,因为它是一对多关系。]

    在你的例子中,第一个是......不太合适,我会说。它仍然比它需要的复杂,但 Core Data 为关系提供了关联实体的确切目的。在第二个示例中存储外键是错误地将 SQL 风格的思维应用于非 SQL API。

    【讨论】:

    • 我正在使用 NSFetchedResultsController 我不知道如何使用 NSSet/NSArray 在 UITableview 中显示数据你能给我一些建议吗?
    • NSArray 应该很容易,因为它支持询问数组中有多少对象以及在索引处查找对象等操作。可以使用sortedArrayUsingDescriptors:NSSet 排序到一个数组中
    • 但这也是一个创建问题。如果NSSet 已更新,那么我必须再次从NSSet 获取所有对象以创建NSArray,所以这也会使应用程序变慢
    • 您好先生,您能否回答这个问题 cmets 因为它们与您的答案冲突stackoverflow.com/q/39076283/4734164
    • 该问题的哪一部分与此答案相矛盾,究竟是什么?您似乎不知道如何使用 Core Data 关系,我对此进行了解释。您在此答案上描述的问题与您在此处提出的问题完全不同,您的另一个问题是那个问题,而不是您在此处提出的问题。跨度>
    【解决方案2】:

    我不完全确定 CoreData 在内部是如何工作的,但我强烈认为关系会更好。我想通过使用它们,您基本上是在遵循指针,而使用谓词会导致搜索某个实体的实例。

    很明显 CoreData 做了一些事情,比如关系数据库(使用 sqlite 作为默认存储等等),但是由于教程告诉你使用关系来做你想做的事情,我很确定它以某种方式依赖于优化。对于某些需要定义与数据模型“并行”的连接的情况,谓词更适合特定搜索或“解决方法”。

    【讨论】:

      猜你喜欢
      • 2015-08-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多