自定义对象的superview上的Xcode错误

时间:2013-04-17 13:08:29

标签: iphone ios objective-c uitableview superview

我有一个名为pfTableViewController的自定义表格视图控制器和一个名为customTableViewCell的自定义单元格。

customTableViewCell内部,我尝试访问NSMutableArray的{​​{1}}:

pfTableViewController

我使用superview两次因为第一个调用- (IBAction)changeEditing:(UITextField *)sender { pfTableViewController *pfWin = (pfTableViewController *) self.superview.superview; [pfWin.pfFields replaceObjectAtIndex: myId withObject: @"some text"]; } 而第二个调用UITableView但是它没有发生,我得到这个错误:

  

2013-04-17 09:48:38.017 webgopher [21757:907]    - [UIViewControllerWrapperView pfFields]:无法识别的选择器发送到实例0x1d590d90

知道这里发生了什么吗?

如果我再使用一个超级视图,它会访问pfTableViewController,我觉得这太过分了!

2 个答案:

答案 0 :(得分:0)

在像superview.superview这样的Apple实现的视图上使用类似UITableViewCell的内容是一个非常糟糕的主意。您依赖于不更改的视图层次结构。这种事情在iOS版本之间很容易破解。

您还假设表视图的超级视图是视图控制器的实例。但视图控制器实例不是视图,也不是视图层次结构的一部分。相反,您将获得一个包含视图控制器视图的私有Apple视图。

您应该在您的单元格上实现某种由视图控制器实现的委托方法。通过这种方式,可以直接向视图控制器通知您的“changeEditing”事件,而无需爬网私有视图层次结构。

答案 1 :(得分:0)

您无法直接从其视图访问控制器。您需要通过响应者链查找第一个控制器。这篇文章可能很有用.-

How to get UIViewController of a UIView's superView in iPhone SDK?