1

私は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;
}
4

2 に答える 2