使用滚动视图取消分配实例的多个视图

时间:2012-06-27 09:53:27

标签: ios memory-management

我的滚动视图存在问题,该视图包含多个视图。我认为问题是子视图正在发布。我在子视图中有按钮,当我单击按钮时出现此错误,[GraphDisplayViewController performSelector:withObject:withObject:]:

  

消息发送到解除分配的实例

。如果只有一个子视图,那么我可以使用一个属性,这可行,但由于子视图的数量不同(一个或多个),它不起作用,我不知道如何解决这个问题。

我目前在开始时一次加载所有视图。我一次只加载一个子视图并将属性分配给该视图,但我不确定这是否有效。

我的布局如下,父视图(DetailViewController)包含一个scrollview,我将视图(GraphDisplayViewController)添加到scrollview,每个子视图加载一个视图(GraphView)。

非常感谢任何帮助或建议。如果您需要更多详细信息,请告诉我们。谢谢你的时间。

我如何添加子视图的代码示例

DetailViewController

- (void)loadScrollViewWithPage:(int)page
{
if (page < 0) return;
if (page >= pageControl.numberOfPages) return;

subView = [viewControllers objectAtIndex:page];   
NSString *description;
NSString *packsize;
if ((NSNull *)subView == [NSNull null]) 
{
    subView = [[GraphDisplayViewController alloc] initWithNibName:@"GraphDisplayViewController" bundle:nil];
    [viewControllers replaceObjectAtIndex:page withObject:subView];
    subView = [[GraphDisplayViewController alloc] init];
    subView.molecule = moleculeName;
    subView.description = description;    
    subView.dataArray = moleculePrices;

}
else
{
    return;
}

// add the controller's view to the scroll view
if (nil == subView.view.superview) 
{
    CGRect frame = scrollView.frame;
    frame.origin.x = frame.size.width * page;
    frame.origin.y = 0;
    subView.view.frame = frame;
    [scrollView addSubview:subView.view];
} 
}

更新 代码中有一个错误,测试是否能解决任何问题

subView = [[GraphDisplayViewController alloc] initWithNibName:@"GraphDisplayViewController" bundle:nil];
[viewControllers replaceObjectAtIndex:page withObject:subView];
subView = [[GraphDisplayViewController alloc] init]; <- Mistake

2 个答案:

答案 0 :(得分:0)

您未保留GraphDisplayViewController分配给subView变量的内容。因此,你在某个时间点会失去它。

我们可以看到您正在获取subView对象,例如subView = [viewControllers objectAtIndex:page]; 那么你也应该将它存储在viewControllers中(虽然我不确定你已经实现了什么逻辑但是在每个已分配的subView的ur代码中必须执行它:[viewControllers replaceObjectAtIndex:page withObject:subView];并且你需要确保viewControllers变量也保留,以便一切顺利运行。)
阵列,以便可以保留它以避免您面临的崩溃。 我希望这对你有用。祝你好运

答案 1 :(得分:0)

我的代码中出现了一个简单的错误,我启动了两次视图。

subView = [[GraphDisplayViewController alloc] initWithNibName:@"GraphDisplayViewController" bundle:nil];
subView = [[GraphDisplayViewController alloc] init]; <- Mistake