2012-03-27 114 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 
相关问题