我的購物車應用程序中的Core Data模型中設置了以下關係。獲取關係並在UITableView中顯示
Menu
- >>Product
< < - Cart
(見下圖)。
並用下面的代碼一個Objective-C的類別:
+ (Cart *)addProductToCartWithProduct:(Product *)product inManagedObjectContext:(NSManagedObjectContext *)context
{
Cart *cart = [NSEntityDescription insertNewObjectForEntityForName:@"Cart" inManagedObjectContext:context];
NSManagedObjectID *retID = [product objectID];
[(Product *)[context objectWithID:retID] setInCart:cart];
[cart addProductsObject:(Product *)[context objectWithID:retID]];
return cart;
}
當用戶按下應用中的「添加到購物車」按鈕,該方法被觸發(上述方法)。我現在想在我的其他課程中購買這些產品(由用戶添加到購物車),在「購物車」所在的位置。我希望這些產品在我的UITableView
中顯示,因此我使用FRC。 但我不知道如何獲取關係,從而顯示產品。我將如何設法做到這一點?
我現在有以下代碼。
- (void)loadCart
{
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
fetchRequest.entity = [NSEntityDescription entityForName:@"Cart" inManagedObjectContext:_theManagedObjectContext];
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"id" ascending:YES];
fetchRequest.sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
[NSFetchedResultsController deleteCacheWithName:@"cartproducts"];
self.fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:_theManagedObjectContext sectionNameKeyPath:nil cacheName:@"cartproducts"];
_fetchedResultsController.delegate = self;
NSError *error = nil;
if (![_fetchedResultsController performFetch:&error]) {
NSLog(@"Fetch Failed");
}
}
我UITableview
cellForRowAtIndexPath:
方法。
- (UITableViewCell *)tableView:(UITableView *)aTableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *plainCellIdentifier = @"OrderCell";
ProductsCell *cell = (ProductsCell *)[aTableView dequeueReusableCellWithIdentifier:plainCellIdentifier];
if (!cell) {
cell = [[ProductsCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:plainCellIdentifier];
}
Cart *ret = (Cart *)[self.fetchedResultsController objectAtIndexPath:indexPath];
// How to show the product names using the relationship?
cell.title = ret.products ??;
[cell setNeedsDisplay];
return cell;
}
所以,你想顯示一個特定購物車的產品? –
是的,我的應用中只有一個購物車。這可能嗎? :) – 7c9d6b001a87e497d6b96fbd4c6fdf