视图控制器释放导致崩溃或奇怪的现象

时间:2012-08-05 15:45:41

标签: ios uiviewcontroller release addsubview

我有一个非常简单的ViewController,它包含以下内容:

@interface ServingsView : UIViewController
@property (retain, nonatomic) IBOutlet UILabel *labelTitle;
@property (retain, nonatomic) IBOutlet UILabel *labelContent;
@property (retain, nonatomic) IBOutlet UIButton *buttonSelect;

我没有为此控制器的m文件添加任何代码。

现在,我正在创建此viewcontroller并将其视图添加到滚动视图:

 for (NSSubArray * Choice in currentItem.ItemsArray)
    {
        stView * ChoiceView=[[stView alloc]initWithNibName:@"stView" bundle:nil];
        ChoiceView.view.tag=1515;
        [mScrollView addSubview:ChoiceView.view];
        ChoiceView.view.frame=CGRectMake(0, [self getMinimumHeight]+h*ChoiceView.view.frame.size.height , 320, ChoiceView.view.frame.size.height);
        ChoiceView.labelTitle.text=Choice.ArrayName;

        [ChoiceView.buttonSelect addTarget:self action:@selector(onSubservingItemClicked:) forControlEvents:UIControlEventTouchUpInside];

        ChoiceView.buttonSelect.tag=h;
        h++;
        increaseHeight+=ChoiceView.view.frame.size.height;
        // here is the problem:
        [ChoiceView release];
    }

现在,我没有在任何地方使用ChoiceView。发生的事情是,按钮甚至没有显示,并且该视图没有任何响应。当在其环境中使用视图滚动时,我得到了不同类型的异常。有时它的CALayer异常,有时是stView异常。当我删除释放线时,一切正常。

我甚至创建了一个它没有发生过的测试项目,所以我在这里遗漏了一些东西。

2 个答案:

答案 0 :(得分:0)

不要做[mScrollView addSubview:ChoiceView.view];之类的事情。如果您在视图控制器包含上查看Apple视频,您会看到它们将其描述为不一致的视图层次结构:https://developer.apple.com/videos/wwdc/2011/?id=102

在定义的滚动视图中创建视图层次结构的视图部分,或者创建使用提供的父/子方法的容器视图控制器。

答案 1 :(得分:0)

好的,这是一个非常奇怪的答案! 经过多次测试和模拟应用程序未能引发此错误后,我将故障控制器添加到另一个应用程序。得到了相同的结果! 所以,我已经完全删除它并创建一个新的...现在它正在工作。

Apple - 去图......