我有三个实体 - 文件,对象和产品。
文件有: id - int64 contragentId - int64 paymentMethod - 字符串 documentDate - 日期 documentKind - String
对手有 id - int64 name - 字符串 地址 - 字符串
产品有 id - int64 sku - 字符串 productQuantity - int64 description - 字符串 unitValue - 十进制 totalValue - 十进制 isTemp - Bool
我已经实现了子类化模型的产品和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];
答案 0 :(得分:0)
使用Core Data,不会使用“外键”来标识另一个表的行,而是使用实体之间的关系。
因此,您应该定义一个关系“contragent”,而不是contragentId
。
从“文档”实体到“Contragent”实体。 (我使用了单数形式“Contragent”,因为这似乎更自然。但我不知道什么是contragent
是。)
您还应该定义从“Contragent”到“Document”的“反向关系”。 如果“Contragent”对象可以连接到几个“Document”对象,则反之 关系是“对多”,否则“对一”。
然后你建立关系只是设置关系:
Document *theDocument = ...
Contragent *theContragent = ...
theDocument.contragent = theContragent; // --> connected!
获取文档的contragent名称:
Document *theDocument = ...
NSString *contrName = theDocument.contragent.name;