我的代表不行

时间:2012-02-17 06:12:46

标签: iphone objective-c delegates

我正在开发一款带有购物车的应用。当我在购物车中添加产品时,我的按钮会以模态方式切换到表格视图控制器。然后,当我选择一行时,应取消模态视图控制器。我尝试使用我的委托来实现这一点。这是我的代码:

(省略无关代码)

ItemsTableViewController(可供选择的产品列表)

//the header file
@class ItemsTableViewController;

@protocol ItemsTableViewControllerDelegate <NSObject>

- (void) itemsTableViewController: (ItemsTableViewController *)sender
                 didSelectProduct: (Product *) aProduct;

@end

@interface ItemsTableViewController : CoreDataTableViewController

@property (nonatomic, strong) UIManagedDocument *itemDatabase;

@property (nonatomic, weak) id <ItemsTableViewControllerDelegate> delegate;

@end

//来自实现的片段

- (void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
    Product *item = [self.fetchedResultsController objectAtIndexPath:indexPath];

    [self.delegate itemsTableViewController:self didSelectProduct:item];
    NSLog(@"DID SELECT ROW AT index %d with name %@", indexPath.row, item.name);

}

//这是我的购物车,ItemsTableViewController委托

- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
    if ([segue.identifier isEqualToString:@"Show Products List"]){
        ItemsTableViewController *itemsTVC = (ItemsTableViewController *)segue.destinationViewController;
        itemsTVC.delegate = self;

    }
}
- (void) itemsTableViewController:(ItemsTableViewController *)sender didSelectProduct:(Product *)aProduct{
    //adds the product in the shopping cart
    [self.shoppingCart addObject:aProduct];
    [self.products reloadData];
    [self dismissModalViewControllerAnimated:YES];
    NSLog(@"from the delegate got product %@", aProduct.name);
}

1 个答案:

答案 0 :(得分:1)

您的segue的目的地是UINavigationController,而不是ItemsTableViewController。也许您将ItemsTableViewController放在故事板上的UINavigationController中。试试这个:

UINavigationController *navController = segue.destinationViewController;
ItemsTableViewController *itemsTVC = (ItemsTableViewController *)navController.topViewController;
itemsTVC.delegate = self;