0

我有三个实体——文件、合同和产品。

文档有:id - int64 contragentId - int64 paymentMethod - 字符串 documentDate - 日期 documentKind - 字符串

反对者有 id - int64 名称 - 字符串地址 - 字符串

产品有 id - int64 sku - 字符串 productQuantity - int64 描述 - 字符串 unitValue - 十进制 totalValue - 十进制 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,您应该定义从“Document”实体到“Contragent”实体的“对等”关系,而不是 。(我使用了单数形式“Contragent”,因为这似乎更自然。但我不知道什么是 contragent。)

您还应该定义从“Contragent”到“Doc​​ument”的“反向关系”。如果一个“Contragent”对象可以连接到几个“Document”对象,则相反的关系是“to-many”,否则“to-one”。

然后你建立连接只是设置关系:

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

并获取文档的相反名称:

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