首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >自动生成属性

自动生成属性
EN

Stack Overflow用户
提问于 2013-11-03 21:26:18
回答 1查看 165关注 0票数 0

我正在设计一个新的发票应用程序。有许多特性我不知道如何在核心数据中实现。我向你寻求以下方面的帮助。

为了保持简单,假设有两个实体,发票实体和细节实体,与-多关系'invoiceDetails‘和-一个关系’细节语音‘。这是我的问题。

  1. 细节实体应该有属性'sequenceNumber‘,当用户添加新的细节时,它应该是自动生成的。对于每个发票,sequenceNumber应该从1开始,并随着用户添加新的详细信息而增加。sequenceNumber应用于对发票中的详细信息进行排序。
  2. 细节实体还具有属性“numberOfItems”和“价格”。它还应该有属性“数量”,它应该作为numberOfItems和价格的产品自动生成。
  3. 发票实体应具有属性“netAmount”,该属性应作为所有详细金额的总和生成。
  4. 发票实体应该有属性'vat‘,它应该是从netAmount自动生成的表达式。
  5. 发票实体还应该有属性'totalAmount‘自动生成为netAmount和vat的总和。
  6. 发票实体应该有属性'dueTo‘自动生成从当前日期加上一些天数。

如何在核心数据应用程序中实现这一点?谢谢。

/Mikael

EN

回答 1

Stack Overflow用户

发布于 2013-11-03 23:51:02

  1. 细节实体应该有属性'sequenceNumber‘,当用户添加新的细节时,它应该是自动生成的。

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

2-6.计算属性

这些操作通常通过子类NSManagedObject处理,然后将setter方法重写到其值影响其他属性的属性上。例如,基于#2,您的price属性的设置器看起来如下所示:

代码语言:javascript
复制
- (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.
}

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19758332

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档