0

我正在设计一个新的发票应用程序。我不知道如何在 Core Data 中实现许多功能。我请求您在以下方面提供帮助。

为简单起见,假设有 2 个实体,即 Invoice 实体和 Detail 实体,具有一对多关系“invoiceDetails”和一对一关系“detailInvoice”。这是我的问题。

  1. 详细信息实体应具有属性“sequenceNumber”,该属性应在用户添加新详细信息时自动生成。对于每张发票,sequenceNumber 应该从 1 开始,并随着用户添加新的详细信息而递增。sequenceNumber 应该用于对发票中的详细信息进行排序。

  2. Detail 实体还具有属性“numberOfItems”和“price”。它还应该具有属性“数量”,该属性应该自动生成为 numberOfItems 和价格的乘积。

  3. 发票实体应具有属性“netAmount”,该属性应作为所有明细金额的总和生成。

  4. 发票实体应具有属性“增值税”,该属性应作为 netAmount 的表达式自动生成。

  5. 发票实体还应具有自动生成的属性“totalAmount”,作为 netAmount 和增值税的总和。

  6. 发票实体应具有从当前日期加上一些天数自动生成的属性“dueTo”。

如何在 Core Data 应用程序中完成此操作?谢谢。

/迈克尔

4

1 回答 1

0
  1. 详细信息实体应具有属性“sequenceNumber”,该属性应在用户添加新详细信息时自动生成。

您必须自己分配此值。我要做的是将最高序列号作为元数据存储在持久性存储文件中(请参阅NSPersistentStoreCoordinator与元数据相关的方法)。每当您创建新实例时,从存储元数据中读取最高数字,将其递增,在新实例上使用该值,然后将新值保存回存储元数据。

2-6。计算属性

这些通常通过子类NSManagedObject化然后覆盖其值影响其他属性的属性的setter方法来处理。例如,基于 #2,您的price属性的设置器将类似于:

- (void)setPrice:(NSDecimalNumber *)price
{
    [self willChangeValueForKey:@"price"];
    [self setPrimitiveValue:price forKey:price];
    [self didChangeValueForKey:@"price"];

    // Now calculate the new value for "amount" and set it on self.
}

每种情况都遵循相同的模式。您还可以使用键值观察来观察这些属性的变化,但我发现自定义访问器更清晰且不易出错。

于 2013-11-03T23:51:02.553 回答