我想從iOS5中的uitableview的另一個屏幕繼續。我設置了一個似乎可以工作的代理(發生segue),但我認爲我需要「設置委託來初始化我想在新屏幕中顯示的數據。儘管當我調用它時,我得到一個NSInvalidArgumentException錯誤prepareforsegue。當調用setDelegate時發生NSInvalidArgumentException錯誤
下面是UITableView的部分代碼...
#import "iTanksV2ListViewController.h"
#import "tank.h"
#import "tankDetailViewController.h"
@interface iTanksV2ListViewController()
@property tank *selectedTank;
@end
@implementation iTanksV2ListViewController
@synthesize tanks = _tanks;
@synthesize tankTableView = _tankTableView;
@synthesize delegate = _delegate;
@synthesize selectedTank = _selectedTank;
- (id)initWithStyle:(UITableViewStyle)style
{
self = [super initWithStyle:style];
if (self) {
// Custom initialization
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
self.tankTableView.delegate = self;
self.tankTableView.dataSource = self;
}
-(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if([segue.identifier isEqualToString:@"Show Tank Details"])
{
UILabel *myLabel = [[UILabel alloc] init];
myLabel.text = self.selectedTank.tankNumber;
[segue.destinationViewController setTankNumberLabel:myLabel];
[segue.destinationViewController setDelegate:self]; ///this is where it fails!!!
}
}
#pragma mark - Table view delegate
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
self.selectedTank = [self.tanks objectAtIndex:indexPath.row];
[self.delegate iTanksListViewController:self choseTank:self.selectedTank];
}
,然後我用下面的詳細視圖...
-(void)iTanksListViewController:(iTanksV2ListViewController *)sender choseTank:(id)tank
{
self.tankToShow = tank;
}
,但這並沒有得到所謂 - 大概是因爲我沒有成功調用setdelegate方法?!
因此,你的'iTanksV2ListViewController'實現並遵循相同的協議。我不認爲這是正確的! – tipycalFlow 2012-03-27 12:48:25
控制檯應該顯示異常的原因。通常,這是因爲您正在向未實現該方法的對象發送消息。控制檯中的NSInvalidArgumentException後面是什麼? – Justin 2012-03-27 13:02:52
這是錯誤的原因:' - [tankDetailViewController setDelegate:]:無法識別的選擇發送到實例0x687b590' – HillInHarwich 2012-03-27 13:10:51