将带有选择器的参数传递给自定义对象的新.xib

时间:2013-07-09 19:56:06

标签: ios objective-c

我有一个tableview,在按下时会加载一个新的.xib。问题是,我需要将自定义对象传递给新的.xib。到目前为止,我有:

-(UITableViewCell *)doTestCellForTableView:(UITableView *)tableView atIndexPath:(NSIndexPath *)indexPath {

 //some other code for current view
 TestObj *testobj = [[TestObj alloc]init];

 if(shouldGo){
   cell.userInteractionEnabled = YES;
   UITapGestureRecognizer *tapped = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(loadTestView:)];
   tapped.numberOfTapsRequired = 1;
   [cell addGestureRecognizer:tapped];
 }

用那种方法:

-(void)loadTestView:(TestObj *)withTestObj{

TestViewController *newView =
[[TestViewController alloc] init];
//Set the property of type TestObj
newView.testobjprop = withTestObj;

[self presentViewController:newView animated:YES completion:nil];
}

抛出NSInvalidArgumentException。如何将它转到选择器将发送在tableview方法中初始化的“testobj”的位置,以便我可以在那里访问它?

如果我注释掉“newView.testobjprop = withTestObj;”,新的.xib就可以正常加载在loadTestView方法中。所以我假设问题存在于那里,这是一个如何将对象从一个.xib传递到另一个.x / p的问题。

1 个答案:

答案 0 :(得分:0)

来自-(void)loadTestView:(TestObj *)withTestObj的论据是UIGestureRecognizer类型,这就是你获得NSInvalidArgumentException的原因。

如果您将其更改为-(void)loadTestView:(UITapGestureRecognizer *)withTestObj,则这将是正常行为。

这就是为什么您需要使用didSelectRow:AtIndexPath,以便将正确的值传递给viewcontroller

此处您根本没有使用TestObj *testobj = [[TestObj alloc]init];