2012-03-27 232 views
0

我想從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方法?!

+0

因此,你的'iTanksV2ListViewController'實現並遵循相同的協議。我不認爲這是正確的! – tipycalFlow 2012-03-27 12:48:25

+0

控制檯應該顯示異常的原因。通常,這是因爲您正在向未實現該方法的對象發送消息。控制檯中的NSInvalidArgumentException後面是什麼? – Justin 2012-03-27 13:02:52

+0

這是錯誤的原因:' - [tankDetailViewController setDelegate:]:無法識別的選擇發送到實例0x687b590' – HillInHarwich 2012-03-27 13:10:51

回答

0

您不能合成您的委託屬性。此外,請確保您的頭文件有正確的委託協議類似

@interface TankDetailViewController : UITableViewController <DELEGATEPROTOCOL> 
+0

我以爲我有...這個片段是從itanksv2listviewcontroller頭: – HillInHarwich 2012-03-27 20:13:11

+0

你似乎有一個名爲兩個不同的類的東西。你的界面和實現應該是相同的名稱。 進入.h文件,超級名稱後面。看我的例子。我也認爲你需要強烈引用你的UITableView插座。 – Justin 2012-03-28 00:12:49

0

引用我原本以爲......這個片段是從itanksv2listviewcontroller頭:

@interface iTanksV2ListViewController : UITableViewController 
@property (nonatomic, strong) NSArray *tanks; 
@property (weak, nonatomic) IBOutlet UITableView *tankTableView; 
@property (weak, nonatomic) id <iTanksV2ListViewControllerDelegate> delegate; 
@end 

,這從M檔:

@synthesize delegate = _delegate; 

,這是我已經把在的DetailView M檔:

@interface tankDetailViewController() <iTanksV2ListViewControllerDelegate> 
@end 
相關問題