2012-06-27 40 views
0

我有我的scrollview,它拥有多个视图的问题。我认为问题是子视图正在发布。我在子视图按钮,当我点击按钮我得到这个错误,[GraphDisplayViewController performSelector:withObject:withObject:]:ios多个视图滚动视图释放实例

消息发送到释放实例

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

我目前一开始就加载了所有的视图。我正在一次只加载一个子视图并将该属性分配给该视图,但我不确定这是否可行。我的布局如下,一个父视图(DetailViewController)包含一个滚动视图,我向视图添加视图(GraphDisplayViewController),每个子视图加载一个视图(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]; 
} 
} 

UPDATE 有一个在代码中的错误,测试,看看是否能解决什么

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

如何声明'subview'? (如果是属性,请使用'self.subView'来引用它。) –

回答

0

在我的代码中有一个简单的错误,我初始化了两次视图。

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

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

,因为我们可以看到你取的subView对象像subView = [viewControllers objectAtIndex:page]; 那么你也应该将其存储在viewControllers(虽然我不知道是什么逻辑,你已经实现了,但是在我们的代码为此,必须执行每个分配subView[viewControllers replaceObjectAtIndex:page withObject:subView];和您需要确保viewControllers变量也可以保留,以便一切顺利进行。)

数组,以便可以保留它以避免您面临的崩溃。
我希望这会对你有用..祝你好运

+0

嗨,谢谢你的回复,你的意思是我应该使用一个属性,例如 @property(nonatomic,retain)GraphDisplayViewController * subView; 如果是这样,我已经这样做了,我更新了我的问题,我想我发现了这个错误,现在它似乎正在工作,但仍在测试它。 – JingJingTao

+0

尽管您可能已将'subView'创建为retain属性,但实际上并未保留,因为您在赋值时未使用'self.subView'。 – samfisher

+0

哦,好吧,使用self.property保留属性总是更好吗?我让我的应用程序工作,我认为这是我在帖子中更新的错误。这很奇怪,但是当我使用'subView'的时候它是有效的。 – JingJingTao