自动生成属性



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

为简单起见,假设有 2 个实体,发票实体和详细信息实体具有对多关系"发票详细信息"和一对一关系"详细信息发票"。 这是我的问题。

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

  2. 详细信息实体还具有属性"项目数"和"价格"。它还应该具有属性"金额",该属性应自动生成为项目数量和价格的乘积。

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

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

  5. 发票实体还应自动生成属性"总金额",作为净额和增值税的总和。

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

如何在核心数据应用程序中完成此操作?谢谢。

/米凯尔

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

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

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

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

最新更新