我有两个实体。 (交易,客户) 交易与客户有1:1的关系。所以Deal有客户,而客户有交易。
首先,我将Customer对象命名为“John”。 第二,我做了Deal对象并用“John”设置客户(#1交易) 第三,我制作了另一个Deal对象并用“John”(#2交易)
设置客户 那时候,我发现了一些问题。 这是#1交易的客户自动设置为零,而#2交易的客户是“约翰”。我该如何解决?
PS1。我从Web服务器获得的数据就是这样的JSON deals = [id:..,...,customer:{...}]
PS2。每当从服务器接收数据时我都会更新对象。
+ (Deal *)dealWithDealsDictionary:(NSDictionary *)dic inManagedObjectContext:(NSManagedObjectContext *)context
{
Deal *deal = nil;
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Deal"];
request.predicate = [NSPredicate predicateWithFormat:@"deal_id = %@", [dic[@"id"] description]];
// Execute the fetch
NSError *error = nil;
NSArray *matches = [context executeFetchRequest:request error:&error];
// Check what happened in the fetch
if (!matches || ([matches count] > 1)) { // nil means fetch failed; more than one impossible (unique!)
deal = [matches lastObject];
// handle error
} else if (![matches count]) {
deal = [NSEntityDescription insertNewObjectForEntityForName:@"Deal" inManagedObjectContext:context];
} else {
deal = [matches lastObject];
}
deal.deal_id = [dic[@"id"] description];
deal.deal_status = [dic[@"deal_status"] description];
deal.deal_stage = [dic[@"deal_stage"] description];
deal.deal_desc = [dic[@"deal_desc"] description];
deal.localized_deal_status = [dic[@"localized_deal_status"] description];
deal.localized_deal_stage = [dic[@"localized_deal_stage"] description];
if (dic[@"customer"]) {
[context performBlock:^{
deal.customer = [Customer customerWithDictionary:dic[@"customer"] inManagedObjectContext:context];
}];
}
return deal;
}
答案 0 :(得分:2)
如果您希望客户有很多交易和/或每个客户都有很多交易(客户可以分别拥有相同的交易),那么将关系设为1对多或多对多。
引用设置为nil,因为你说一次只能有1个引用。
答案 1 :(得分:2)
你没有1:1的关系:它是1:N
2笔交易拥有相同的客户,因此1位客户有N笔交易。
CoreData希望保持1:1约束,其中1个交易总是1个唯一客户,反之亦然。
更改为一对多