iOS5のuitableviewから別の画面にセグをしようとしています。私は動作すると思われるデリゲートなどを設定しました(セグが発生します)が、私は "デリゲートを設定して新しい画面に表示したいデータを初期化する必要があると思います。 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
コンソールに例外の理由が表示されるはずです。通常は、そのメソッドを実装していないオブジェクトにメッセージを送信しているためです。コンソールのNSInvalidArgumentExceptionに続くものは何ですか? – Justin
これはエラーの理由です: ' - [tankDetailViewController setDelegate:]:認識できないセレクタがインスタンス0x687b590に送信されました' – HillInHarwich