自动生成属性

时间:2013-11-03 21:26:19

标签: core-data

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

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

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

  2. 详情实体还具有'numberOfItems'和'price'属性。它还应该具有属性'amount',它应该作为numberOfItems和price的乘积自动生成。

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

  4. 发票实体应具有属性'vat',该属性应自动生成为netAmount中的表达式。

  5. 发票实体还应将自动生成的属性'totalAmount'作为netAmount和vat的总和。

  6. 发票实体应该从当前日期加上一些天数自动生成属性'dueTo'。

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

    /的Mikael

1 个答案:

答案 0 :(得分:0)

  
      
  1. 详情实体应具有属性' sequenceNumber'这应该在用户添加新细节时自动生成。
  2.   

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

  

2-6。计算属性

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

- (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.
}

对每个案例采用相同的模式。您还可以使用键值观察来监视这些属性的更改,但我发现自定义访问器更清晰,更不容易出错。