1

私はこれらのエンティティを持っています:

  • 製品エンティティ
    • 名前
    • 注文 [ProductsOrderRelationship]
  • OrderEntity
    • 製品 [ProductsOrderRelationship]
  • 製品注文関係
    • 注文 [注文エンティティ]
    • 製品 [製品エンティティ]

ここで、既存の注文を編集したいと思います。利用可能な製品とカートのリストがあります。

ここで、これらの利用可能な製品をカートに追加したいと思います。

コードは製品が存在するかどうかを確認する必要があるため、数量が増えるだけです。

しかし、今では、単に関係を追加しているだけです..

コードを共有させてください!インターフェイスには、左側に利用可能な製品のリストがあり、右側にカート (注文エンティティ) のリストがあります。どちらも私のコードにリンクされた配列コントローラーを持っています。次に、次のアクションがあります。

- (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)
}

この特定の問題のガイドが見つかりません.何か提案はありますか?

4

1 に答える 1

1

firstSelectedProductsProductsEntity オブジェクトと ProductsOrderRelationship オブジェクトが含まれていると思いoldProductsます。それが本当なら問題は…

if (![oldProducts containsObject:object]) {

...何にも一致しません。

(ProductsOrderRelationship と呼ばれるものは、多くの場合、LineItem と呼ばれます。クラスの名前とそれに関連付けられた変数を変更すると、ロジックがより明確になる場合があります。)

于 2012-05-10T14:46:15.903 に答える