2013-05-03 3 views
1

У меня есть две сущности. (Сделка, клиент) Сделка и клиент имеют отношения 1: 1. поэтому у сделки есть клиент, и у Клиента есть дело.coredata отношение установлено nil автоматически

Во-первых, я создал объект Customer под названием «John». второй, я сделал объект сделки и установить клиент с «John» (# 1 сделка) третий, я сделал еще один объект сделки и установить клиент с «John» (# 2 сделки)

в то время, я обнаружил некоторые проблема. это покупатель 1 комплект 1 штуки, автоматически, и заказчик 2-й сделки «Джон».

как я могу это решить?

ps1. Я получил данные с веб-сервера как JSON, как это сделок = [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; 
} 

ответ

2

вы не имеете 1: отношение 1: это 1: N

2 сделки имеют один и тот же клиент, так что один клиент имеет N сделок.

CoreData хотел сохранить ограничения 1: 1, где 1 сделка имеет всегда 1 уникального клиента и наоборот.

Изменить на один-на-многие

+0

да, это .. это была моя глупая ошибка. Спасибо за ответ. – drskur

2

сделать отношения 1 ко многим или многие ко многим, если вы хотите клиента иметь много сделок и/или много клиентов каждый, чтобы иметь много сделок (где клиенты могут иметь одинаковое дело).

Ссылка была установлена ​​на нуль, потому что вы сказали, что может быть только 1 ссылка за раз.

+0

спасибо, это была моя концептуальная ошибка. Я установил Customer.deal в Customer.deals (To-Many Relationship), он решил. – drskur

Смежные вопросы