私は2つのエンティティを持っています。(Deal, Customer) Deal と Customer は 1:1 の関係です。したがって、Deal には顧客があり、Customer には取引があります。
まず、「John」という名前の Customer オブジェクトを作成しました。2 番目に、Deal オブジェクトを作成し、「John」で顧客を設定しました (#1 取引) 3 番目に、別の Deal オブジェクトを作成し、「John」で顧客を設定しました (#2 取引)
その時、私はいくつかの問題を見つけました。つまり、#1 の取引の顧客は自動的に nil に設定され、#2 の取引の顧客は "John" です。
どうすればそれを解決できますか?
ps1。Web サーバーからデータを JSON として取得しました
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;
}