繁体   English   中英

调用setDelegate时发生NSInvalidArgumentException错误

[英]NSInvalidArgumentException error occurs when calling setDelegate

我正在尝试从iOS5的uitableview选择另一个屏幕。 我已经建立了一个代表等,它似乎可以正常工作(发生segue),但是我认为我需要“设置代表以初始化要在新屏幕上显示的数据。我收到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方法?

您必须未合成委托属性。 另外,请确保您的头文件正确引用了委托协议,例如

@interface TankDetailViewController : UITableViewController <DELEGATEPROTOCOL>

我以为我有...此代码段来自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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM