我目前为我的订购应用程序设置了以下关系。
产品 <<- 购物车
这是正常工作,产品被添加到购物车等等。当用户按下“购物车视图控制器”中的“订购按钮”时,我希望所有这些刚刚被订购的产品都显示在我的另一个视图控制器中。我想显示用户下的所有订单。但我真的不知道如何设置我的核心数据模型来完成这个?我需要购物车中的一对一关系还是一对多关系或完全不同的关系?
谢谢您的帮助。
编辑1:
编辑2:
+ (ProductOrder *)addProductToOrderWithProduct:(Product *)product inManagedObjectContext:(NSManagedObjectContext *)context {
ProductOrder *orderProduct = nil;
orderProduct = [NSEntityDescription insertNewObjectForEntityForName:@"ProductOrder" inManagedObjectContext:context];
NSManagedObjectID *productID = [product objectID];
orderProduct.antal = product.antal;
[(Product *)[context objectWithID:productID] addOrderedProductsObject:orderProduct];
return orderProduct;
}
+ (Order *)addOrderedProductToOrderWithOrderedProduct:(ProductOrder *)orderedProduct inManagedObjectContext:(NSManagedObjectContext *)context {
Order *order = nil;
order = [NSEntityDescription insertNewObjectForEntityForName:@"Order" inManagedObjectContext:context];
// THIS SHOULD INCREMNT THE ATTRIBUTE FOR SECTIONS, WHEN A NEW ORDER IS CREATED.
NSNumber *number = [NSNumber numberWithInt:order.orderNumber.intValue];
int value = [number intValue];
number = [NSNumber numberWithInt:value + 1];
order.orderNumber = [NSString stringWithFormat:@"Order %@", number.stringValue];
NSLog(@"%@", order.orderNumber );
NSManagedObjectID *orderedProductID = [orderedProduct objectID];
[order addOrderProductsObject:(ProductOrder *)[context objectWithID:orderedProductID]];
return order;
}
从购物车中的产品添加产品到订单:
// 购物车产品
for (Product *prod in [self.fetchedResultsController fetchedObjects]) {
[[[DataManager sharedInstance] backgroundManagedObjectContext] performBlock:^{
[Order addOrderedProductToOrderWithOrderedProduct: [ProductOrder addProductToOrderWithProduct:prod inManagedObjectContext:[[DataManager sharedInstance] backgroundManagedObjectContext]] inManagedObjectContext:[[DataManager sharedInstance] backgroundManagedObjectContext]];
prod.antal = [NSNumber numberWithInt:0];
[self saveCurrentContext:_theManagedObjectContext];
[[DataManager sharedInstance] saveBackgroundContext];
[[DataManager sharedInstance] saveMasterContext];
}];
}
从传递的订单对象中加载“订单视图控制器”中的订单
NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"ProductOrder"];
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"inOrder.orderNumber" ascending:YES];
[fetchRequest setSortDescriptors:@[sortDescriptor]];
self.fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:_theManagedObjectContext sectionNameKeyPath:@"inOrder.orderNumber" cacheName:nil];
_fetchedResultsController.delegate = self;
NSError *error = nil;
if (![_fetchedResultsController performFetch:&error]) {
NSLog(@"Fetch Failed");
}
}