0

新しい請求アプリケーションを設計しています。Core Data に実装する方法がわからない機能が多数あります。以下の点についてご協力をお願いします。

簡単にするために、2 つのエンティティ、Invoice エンティティと Detail エンティティがあり、対多の関係 'invoiceDetails' と対 1 の関係 'detailInvoice' があるとします。これが私の質問です。

  1. 詳細エンティティには、ユーザーが新しい詳細を追加したときに自動生成される属性「sequenceNumber」が必要です。請求書ごとに、sequenceNumber は 1 から始まり、ユーザーが新しい詳細を追加するにつれて増加します。請求書内の詳細を並べ替えるには、sequenceNumber を使用する必要があります。

  2. 詳細エンティティには、属性「numberOfItems」と「price」もあります。また、numberOfItems と price の積として自動生成される属性「amount」も必要です。

  3. 請求書エンティティには、すべての詳細金額の合計として生成される属性「netAmount」が必要です。

  4. 請求書エンティティには、netAmount から式として自動生成される属性「vat」が必要です。

  5. Invoice エンティティには、netAmount と vat の合計として自動生成される属性「totalAmount」も必要です。

  6. 請求書エンティティには、現在の日付と日数から自動生成された属性「dueTo」が必要です。

Core Data アプリケーションでこれを行うにはどうすればよいですか? ありがとう。

/ミカエル

4

1 に答える 1

0
  1. 詳細エンティティには、ユーザーが新しい詳細を追加したときに自動生成される属性「sequenceNumber」が必要です。

この値は自分で割り当てる必要があります。私がしたいことは、最大のシーケンス番号をメタデータとして永続ストア ファイルに保存することです (NSPersistentStoreCoordinatorのメタデータ関連のメソッドを参照してください)。新しいインスタンスを作成するときはいつでも、ストア メタデータから最大数を読み取り、それを増やし、新しいインスタンスでその値を使用してから、新しい値をストア メタデータに保存します。

2-6. 計算された属性

これらは通常NSManagedObject、値が他の属性に影響を与える属性のセッター メソッドをサブクラス化し、オーバーライドすることによって処理されます。たとえば、#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 に答える