3

这是我的场景:

Main VC : Scroll View : [Multiple] MyPage : [Multiple] ObjectView : [Multple] UIButton

我的主视图控制器包含一个UIScrollView. 滚动视图应该加载多个MyPage带有 pagingEnabled 的“”视图。我使用 IB 创建“ MyPage”接口 ( MyPage.xib) 并查看控制器文件 ( MyPage.h &.m)。 MyPage.xib文件所有者设置为 MyPage。这个“ MyPage”将再次加载我通过 IB 使用 ( ObjectView.xib, ObjectView.h, ObjectView.m)创建的多个 ObjectView

MyPage 和 ObjectView 类都是 UIViewController 的子类,它包含我的一些数据属性。

ObjectView 类有几个按钮,我有这些按钮 Touch Up 操作,通过控件将按钮拖动到我的 ObjectView.h。

在我的 Main VC 的 viewDidLoad 方法中,我有一个循环将添加所有页面:

- (void)viewDidLoad {
  ...
  for (int i=0; i<numPages; i=i+1) {
    MyPage *spg =[[MyPage alloc]i init];
    ...definition of spg properties...
    [spg loadPage:i+1];
    [scrollView addSubview:spg.view];
  }
}

在 MyPage loadPage 方法中,我有一个循环将添加所有 ObjectView

- (void) loadPage:(int) x {
  ...
  for (int i=0; i<numObjects; i++) {
    ObjectView *objvc = [[ObjectView alloc] init];
    ... defining objvc frame coordinates && other properties ...
    [self.view addSubview:objvc.view];
  }
}

在 ObjectView 中,有几个按钮,我通过 Ctrl-Drag 按钮将这些按钮连接到 IB 中的 TouchUp 操作到我的 ObjectView.h。

该应用程序已成功构建,滚动视图已加载,所有页面和所有对象都很好地显示。但是,当我触摸按钮时,会出现以下运行时错误:

由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:

-[TitleLayouer touchBtnOnline:]:无法识别的选择器发送到实例 0x17f810'

我尝试在按钮操作方法中的第一个语句上设置断点,但是甚至无法达到该断点。

希望有人可以帮助我解决这个问题。

4

2 回答 2

1

我找出问题和解决方案。问题是由于 ARC 在 ObjectView 和 MyPage 对象超出其范围(循环?)时释放它们,因此在运行时它不能再引用内存中的 View Controller 对象。

解决方案是在 View Controller 中有一个 NSMutableArray 属性(记得用 init 分配它,我曾经忘记它,它会导致另一个内存错误......)。在循环内部,将视图控制器对象 (ObjectView/MyPage) 添加到数组中,以便这些对象将保留在内存中。

于 2012-09-10T07:55:17.463 回答
0

我认为您没有在 .m 文件中定义方法 touchBtnOnline: 。

于 2012-09-10T07:39:26.723 回答