0

私のモデルには、次のコアデータ関係が設定されています。

カテゴリ -> 製品 -> CartProduct <<- カート (下の図を参照)。

ここに画像の説明を入力

しかし、これらの関係を (コードで) 確立する方法を理解するのに苦労しています。私は、CartProduct+Product & Cart+CartProduct という名前の 2 つの Objective-C カテゴリを作成しました。

CartProduct+Product には次のコードが含まれています。ユーザーが「カートに追加」ボタンを押すと、このメソッドが呼び出されます。

+ (CartProduct *)addProductToCartProducts:(Product *)theProduct inManagedObjectContext:(NSManagedObjectContext *)context {


CartProduct *cartProduct = nil;

NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"CartProduct"];
NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"products" ascending:YES];
request.sortDescriptors = [NSArray arrayWithObject:sortDescriptor];

NSError *error = nil;
NSArray *cartProducts = [context executeFetchRequest:request error:&error];

if (!cartProducts || ([cartProducts count] > 1)) {
    // handle error

} else if (![cartProducts count]) {




      cartProduct = [NSEntityDescription insertNewObjectForEntityForName:@"CartProduct"
                                                   inManagedObjectContext:context];
    /*This method is called from an background context, to prevent context conflicting, get nsmangedobject by its id, which is threadSafe. */
    NSManagedObjectID *retID = [theProduct objectID];


    //Setup One-One relationship from Product to CartProduct
    cartProduct.product = (Product *) [context objectWithID:retID];
  /*Call method from class Cart+CartProduct to establish to-many relationship from Cart     to CartProduct.*/
    [Cart addCartProductToCart:cartProduct inManagedObjectContext:context]; 


} else {
    cartProduct = [cartProducts lastObject];
}

return cartProduct;

}

Cart+CartProduct には次のコードが含まれています。

+ (Cart *)addCartProductToCart:(CartProduct *)theCartProduct inManagedObjectContext:(NSManagedObjectContext *)context {


Cart *cart = nil;

NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"CartProduct"];
NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"productsInCart" ascending:YES];
request.sortDescriptors = [NSArray arrayWithObject:sortDescriptor];

NSError *error = nil;
NSArray *cartProducts = [context executeFetchRequest:request error:&error];

if (!cartProducts || ([cartProducts count] > 1)) {
    // handle error

} else if (![cartProducts count]) {




    cart = [NSEntityDescription insertNewObjectForEntityForName:@"Cart"
                                                inManagedObjectContext:context];


    [cart addProductsInCartObject:theCartProduct];

} else {
    cart = [cartProducts lastObject];
}

return cart; 

}

ここで、ユーザーがカートに追加したオブジェクトを表示したいので、カートエンティティからフェッチします。しかし、関係を正しく「接続」したかどうかわかりませんか? 商品を表示できるように、カート内の商品を取得する方法を説明します。(これは CartProduct と 1 対多の関係にあります)。

だから私の質問は:

  1. 確立された関係は正しいですか?

  2. カートに追加された商品を取得するにはどうすればよいですか?

注: 今年の初めに、次の投稿を行いました:カート機能に追加 - コア データとこの質問はそれに基づいています。

4

1 に答える 1