2012-05-10 2 views
1

У меня есть эти объекты:Какао: Как избежать дублированных отношений с данными ядра?

  • ProductsEntity
    • имя
    • заказы [ProductsOrderRelationship]
  • OrderEntity
    • изделия [ProductsOrderRelationship]
  • ProductsOrderRelationship
    • заказ [OrderEntity]
    • продукт [ProductsEntity]
    • количество

Теперь я хочу, чтобы изменить существующий порядок. У меня есть список доступных продуктов и тележка.

Теперь я хочу добавить эти товары в корзину.

Код должен проверить, существуют ли продукты, поэтому он увеличивает количество.

Но, сейчас, это просто добавить больше отношения ..

Позвольте мне поделиться кусок кода! Интерфейс имеет список слева с доступными продуктами и список справа с тележкой (объект заказа). Оба имеют контроллеры массивов, связанные с моим кодом. Затем у меня есть это действие:

- (IBAction)addSelectedProducts:(id)sender { 

    NSArray *firstSelectedProducts = [availableProductsController selectedObjects]; 
    //Objects selected in the array controller 
    NSMutableArray *selectedProducts = [[NSMutableArray alloc] initWithCapacity:1]; 
    //Here I will filter the repeated ones 
    NSMutableSet *newProducts = [NSMutableSet set]; 
    //This is the final value to change in the current order entry. 
    NSMutableSet *oldProducts = [orderManagedObject valueForKey:@"products"]; 
    //This is the old value I will change. 

    //Here we filter every repeated entries: 
    if ([firstSelectedProducts count] > 0) { 
     for (id object in firstSelectedProducts) { 
      if (![oldProducts containsObject:object]) { 
       [selectedProducts addObject:object]; 
      } 
     } 
    } 

    //Here we create objects in the relationship entity: 
    for (int i = 0; i < [selectedProducts count]; i++) { 

     // Create new relationship. 

     NSManagedObject *newProductObject = [ 
      NSEntityDescription 
       insertNewObjectForEntityForName:@"ProductsOrderRelationship" 
         inManagedObjectContext:managedObjectContext 
     ]; 

     [newProductObject setValue:[selectedProducts objectAtIndex:i] forKey:@"product"]; 
     [newProductObject setValue:orderManagedObject forKey:@"order"]; 

     [newProducts addObject:newProductObject]; 

     [newProductObject release]; 

    } 

    [newProducts unionSet:oldProducts]; 
    //Join old products and new products. 
    [orderManagedObject setValue:newProducts forKey:@"products"]; 
    //Re-set the value. 

    //(... release stuff here) 
} 

Я не могу найти руководство по этой конкретной проблеме .. Любые предложения?

+0

Избегайте дублирования отношений или дублировать ввод данных? –

ответ

1

Я предполагаю, что firstSelectedProducts содержит объекты ProductsEntity и oldProducts содержит ProductsOrderRelationship objects. Если это правда, проблема в том, что ...

if (![oldProducts containsObject:object]) { 

... никогда не будет соответствовать чему-либо.

(Что вы называете ProductsOrderRelationship часто называют LINEITEM. Изменение имени класса и связанных с ним переменных могли бы сделать логику более понятной.)

+0

Спасибо! Я сделал лучший чек. – Apollo

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