我正在研究一個有購物車的應用程序。當我在購物車中添加產品時,我的按鈕以模態方式延伸到桌面視圖控制器。然後當我選擇一行時,模態視圖控制器應該被解除。我試圖用我的代表實現這一點。這裏是我的代碼:我的代理不起作用
(省略不相關的代碼)
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);
}
當你運行它時究竟發生了什麼?你還在哪裏調用了'NSLog'(或斷點)來確保你的變量被正確地賦值,並且你的方法被調用(或者沒有被調用)?你的日誌輸出是什麼? – 2012-02-17 06:22:51
它記錄了一行被選中並且該項目被識別,但是從委託的一部分它不記錄NSLog(@「從代理獲得產品%@」,aProduct.name); – acecapades 2012-02-17 06:23:58
你的代表是否有弱點? – 2012-02-17 13:02:45