CoreData有什么不同

时间:2011-12-21 02:52:40

标签: iphone objective-c ios core-data

我正在使用coredata框架。现在我有一个问题:
我在[1:n]Order对象之间有OrderDetail的关系。 在第一个tableview中,我使用NSFetchedResultsController获取Order的列表。 我的问题是如何计算每个Ordertail Order

- (void)configureCell:(UITableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath

我得到了Order个对象。称之为parent_Object。

计算OrderDetail的好方法是什么:

  1. NSFetchRequest与谓词"Order == %@',parent_Object一起使用。然后我计算结果提取数组。
  2. 使用属性:parent_Object.OrderDetails.count
  3. 有什么区别以及哪种方式可以节省执行时间 请帮帮我。

2 个答案:

答案 0 :(得分:0)

通常,从核心数据中提取是一项昂贵的工作。但是,在任何一种情况下,您都不应该遇到任何性能问题。要回答您的问题,您应该使用该属性,因为不需要提取或谓词。仅当您过滤某些对象时才使用谓词。那么你在两种方法中所做的是

  1. 创建谓词并使用它来获取数组中的所有Order个对象。然后,您调用计数来获取OrderDetails的{​​{1}}总数。

  2. 您已拥有管理对象的nsset和呼叫计数。

  3. 所以,从逻辑上讲,第二种方式更快,因为你不进行任何提取。但对于小型项目来说,这真的无关紧要。如果您有大量对象并且只想对结果进行采样,则可以在获取请求之前始终在请求上调用Order

答案 1 :(得分:0)

如果您在查询时看看苹果会做什么

    [paretnt_Object.orderdetails allObjects];

你会发现他们做了一个简单的FetchRequest。

我认为你有两个选择

  1. 使用 -

    - (NSUInteger)countForFetchRequest:(NSFetchRequest *)request error:(NSError **)error
    

    如果您将使用use fetch请求,此方法将返回仅对您将获得的对象的计数。我相信它更快,因为它不加载对象。

  2. 在上一届WWDC上有一篇关于CoreData的讲座。我从讲座中学到的一件事是,您应该尝试以稍后使用它的方式构建数据。如果您知道您经常需要这些获取请求,则可以考虑将 OrderDetail count 存储为订单中的属性,并在每次更改时更新计数。这样,每次添加或减去OrderDetail时都会执行一次,当您同时对多个Order实体执行此操作时,它会快得多。

  3. 好运