0

私のアプリには次の関係があります。

商品 ->> 商品注文 <<- 注文

次に、これらの関係を確立するために、2 つの Obj-c カテゴリがあります。

製品注文+製品

+ (ProductOrder *)addProductToOrderWithProduct:(Product *)product inManagedObjectContext:(NSManagedObjectContext *)context {

    ProductOrder *orderProduct = nil;

    orderProduct = [NSEntityDescription insertNewObjectForEntityForName:@"ProductOrder" inManagedObjectContext:context];

    NSManagedObjectID *productID = [product objectID];

    orderProduct.qnty = product.qnty; 
    orderProduct.price = product.price; 

    [(Product *)[context objectWithID:productID] addOrderedProductsObject:orderProduct];

    return orderProduct;

}

そして、Order+ProductOrder

+ (Order *)addOrderedProductToOrderWithOrderedProduct:(ProductOrder *)orderedProduct inManagedObjectContext:(NSManagedObjectContext *)context {

    Order *order = nil;

   order = [NSEntityDescription insertNewObjectForEntityForName:@"Order" inManagedObjectContext:context];

    NSManagedObjectID *orderedProductID = [orderedProduct objectID];

    [order addOrderProductsObject:(ProductOrder *)[context objectWithID:orderedProductID]];

    return order; 

}

次のように、これらの関係に製品を追加します。

   for (Product *prod in [self.fetchedResultsController fetchedObjects]) {

                [[[DataManager sharedInstance] backgroundManagedObjectContext] performBlock:^{

                    ProductOrder *prodOrder = [ProductOrder addProductToOrderWithProduct:prod inManagedObjectContext:[[DataManager sharedInstance] backgroundManagedObjectContext]];

                    Order *order = [Order addOrderedProductToOrderWithOrderedProduct:prodOrder inManagedObjectContext:[[DataManager sharedInstance] backgroundManagedObjectContext]];

                    NSInteger amount = [order.orderNumber integerValue];

                    amount++;

                    order.orderNumber =  [NSString stringWithFormat:@"Order %@", [NSNumber numberWithInteger:amount]];

                    [[DataManager sharedInstance] saveBackgroundContext];
                    [[DataManager sharedInstance] saveMasterContext];

                }];

}

これらの製品をヘッダーでグループ化する必要があります。Order エンティティにこの orderNumber 属性があり、リレーションシップに追加された製品のグループごとにインクリメントしたいと考えています。どうすればこれを行うことができますか?

視覚的な例:

ここに画像の説明を入力

4

1 に答える 1

1

あなたのコードには多くの問題があります。

まず、別の管理対象オブジェクト コンテキストが必要な特定の理由はありますか? そうでない場合は、その部分を削除します。各管理対象オブジェクトのコンテキストにアクセスできることを覚えておいてください

product.managedObjectContext;

次に、オブジェクトをコンテキスト間で渡す場合にのみ必要な ObjectID を使用しています。メソッドでは、から ID を抽出し、productそれを取得するために呼び出しobjectWithIDます。それはまったく意味がありません。

ProductOrder第三に、この実体を持つには十分な理由が必要です。あなたが私たちに伝えていなくても、たとえば、注文の製品にさまざまな数量と注文番号を含めたいので、それが必要であると仮定しましょう. ただし、選択した名前は非常に紛らわしいものです。と呼びましょうItem

スキームは次のようになります。

Product <---->> Item <<------> Order

Core Data で生成されたメソッドを使用して、関係を追加し、カテゴリを破棄するだけです。

テーブルの場合、次のようにエンティティを取得しOrderてデータソースに通知できます。

// number of sections
fetchedObjects.count;

// title for section
Order *order = fetchedObjects[section];
order.name;

// number of rows in section
Order *order = fetchedObjects[section];
order.items.count;

// row data
Order *order = fetchedObjects[section];
NSArray *items = [order.items sortedArrayUsingSortDescriptors:
  @[[NSSortDescriptor sortDescriptorWithKey:@"sequenceNumber" ascending:YES]]];
Item *item = items[indexPath.row];
item.product.name; 
于 2013-07-01T11:44:50.170 に答える