【问题标题】:Xcode error on superview of custom object自定义对象的超级视图上的 Xcode 错误
【发布时间】:2013-04-17 13:08:28
【问题描述】:

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

从我的customTableViewCell 内部,我尝试访问pfTableViewControllerNSMutableArray

- (IBAction)changeEditing:(UITextField *)sender {
    pfTableViewController *pfWin = (pfTableViewController *) self.superview.superview;
    [pfWin.pfFields replaceObjectAtIndex: myId withObject: @"some text"];
}

我使用了 superview 两次,因为第一个调用 UITableView 而第二个应该调用 pfTableViewController 但它没有发生,我收到此错误:

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

知道这里发生了什么吗?

如果我再使用一个超级视图,它会访问UINavigationTransitionView,我认为这太过分了!

【问题讨论】:

  • 表格视图是否嵌套在导航控制器中?
  • 表格视图嵌套在这个自定义的表格视图控制器中。它在我的 mainStoryboard 中

标签: iphone ios objective-c uitableview superview


【解决方案1】:

在苹果实现的视图上使用superview.superview 之类的东西UITableViewCell 是一个非常糟糕的主意。您依赖于视图层次结构不变。这种事情很容易在不同版本的 iOS 之间中断。

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

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

【讨论】:

    【解决方案2】:

    您不能直接从控制器的视图访问控制器。您需要通过响应者链寻找第一个控制器。这篇文章可能有用。-

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-21
      • 2019-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多