我有一个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的问题。
答案 0 :(得分:0)
来自-(void)loadTestView:(TestObj *)withTestObj
的论据是UIGestureRecognizer
类型,这就是你获得NSInvalidArgumentException
的原因。
如果您将其更改为-(void)loadTestView:(UITapGestureRecognizer *)withTestObj
,则这将是正常行为。
这就是为什么您需要使用didSelectRow:AtIndexPath
,以便将正确的值传递给viewcontroller
。
此处您根本没有使用TestObj *testobj = [[TestObj alloc]init];
。