0

Documents、Contragents、Products の 3 つのエンティティがあります。

ドキュメントの内容: id - int64 contragentId - int64 paymentMethod - 文字列 documentDate - 日付 documentKind - 文字列

Contragents には id - int64 name - 文字列アドレス - 文字列があります

製品の ID - int64 sku - 文字列 productQuantity - int64 説明 - 文字列 unitValue - 10 進数の totalValue - 10 進数の isTemp - Bool

モデルをサブクラス化する Products を実装し、totalValue = quantity * unitValue

別のテーブルにすべてのドキュメントを保持したいのですが、Contragent.name を表示する方法がわかりません。そのDocument.contragentId = Contragent.idを使用する必要があります。

    - (IBAction) createDocument:(id)sender
{
    //create new document
NSManagedObject *document = [NSEntityDescription
                             insertNewObjectForEntityForName:@"Documents"
                             inManagedObjectContext:self.managedObjectContext];

NSNumber *num = [NSNumber numberWithInteger: [_documentNumber integerValue]];
[document setValue: num  forKey:@"id"];
[document setValue: [_documentKind stringValue]  forKey:@"documentKind"];
[document setValue: [_documentDate dateValue]  forKey:@"documentDate"];
[document setValue: [_paymentMethod stringValue]  forKey:@"paymentMethod"];
[_documentNumber setIntegerValue:[_documentNumber integerValue]+1];

//get ID
//NSString *contragentId = [[_contragents selectedObjects] valueForKey:@"eik"];
//NSLog(@"The customer ID is: %@", contragentId);

document.contragent = [_contragents selectedObjects];
4

1 に答える 1

0

Core Data では、「外部キー」を使用して別のテーブルの行を識別するのではなく、エンティティ間の関係を識別します。

したがって、代わりにcontragentId、「文書」エンティティから「契約」エンティティへの関係「契約」を定義する必要があります。(単数形の "Contragent" を使用したのは、より自然なように思われるためです。しかし、Contragent が何であるかはわかりません。)

「Contragent」から「Document」への「逆関係」も定義する必要があります。「Contragent」オブジェクトが複数の「Document」オブジェクトに接続できる場合、逆の関係は「対多」になり、それ以外の場合は「対 1」になります。

次に、関係を設定するだけで接続を作成します。

Document *theDocument = ...
Contragent *theContragent = ...
theDocument.contragent = theContragent; // --> connected!

ドキュメントのコントラジェント名を取得します。

Document *theDocument = ...
NSString *contrName = theDocument.contragent.name;
于 2013-10-13T08:25:40.757 に答える