Ios 添加viewcontroller';后获取EXC#u BAD#u访问错误;作为另一个viewcontroller的子视图查看';你的观点是什么?

Ios 添加viewcontroller';后获取EXC#u BAD#u访问错误;作为另一个viewcontroller的子视图查看';你的观点是什么?,ios,uiviewcontroller,exc-bad-access,Ios,Uiviewcontroller,Exc Bad Access,在我的应用程序中,我有两个视图控制器。第一个视图控制器是应用程序窗口的rootViewController。单击第一个ViewController中的按钮时,我将第二个ViewController的视图作为子视图添加到第一个视图中,第二个ViewController的视图中有一个按钮,我的问题是,当我点击该按钮时,应用程序会崩溃 -(void)theCheckoutViewisExpandedwitPatient:(id)patient { SecondViewController *s

在我的应用程序中,我有两个视图控制器。第一个视图控制器是应用程序窗口的rootViewController。单击第一个ViewController中的按钮时,我将第二个ViewController的视图作为子视图添加到第一个视图中,第二个ViewController的视图中有一个按钮,我的问题是,当我点击该按钮时,应用程序会崩溃

-(void)theCheckoutViewisExpandedwitPatient:(id)patient
{
    SecondViewController *sample=[[SecondViewController alloc]init];
    CGRect rect=sample.view.frame;
    rect.origin.y=30;
    rect.origin.x=305;
    [sample.view setFrame:rect];
    [self.view addSubview:[sample view]];
}

是的,问题在这里。当您单击按钮时,它的“尝试激发”方法位于
secondviewcontroller
中。但是在您调用之前,secondviewcontroller将在此方法调用之后超出范围(
get dealloc
),CheckOutView将扩展到WitPatient


我们可以简单地说,
[button->target not alive]

问题是SecondViewController没有分配给强变量/属性,因此当方法返回时,它被解除分配

当方法返回时,任何指向对象的变量(如果我记得正确,称为自动变量)都将从内存中删除。结果,该变量指向的对象将被释放。如果此对象没有保留在其他任何位置,例如通过分配给强属性或强实例变量,则将取消分配该对象。现在,您要做的是,抓取第二个视图控制器的视图,并将其粘贴到视图控制器视图的视图层次结构中,其中定义了此方法。该方法返回,变量从堆栈中弹出,SampleViewController不以任何方式保留,因此它被释放。“新建”视图执行的任何操作,如果导致调用其视图控制器(第二个视图控制器),例如按钮点击事件通知,都将导致崩溃,因为该视图控制器不再位于内存中


顺便说一句,你只是做得不对。如果您想编写自定义容器,请查看视图控制器包含API。

SecondViewController*sample=[[MedicalationsList alloc]init]这是什么?如何编译代码?是
MedicalationsList
第二视图控制器的子类吗?@danypata我已更正问题您应该启用异常断点并检查导致崩溃的行。如果您不知道如何解决问题,请在崩溃出现的地方张贴帖子。;)应用程序何时崩溃,是在第一个按钮上还是在第二个按钮上?@danypata on second(即添加的按钮)你是如何得出这个结论的?。调用
[self.view addSubview:[sample view];
时,应用程序将崩溃,因为[sample view]是零。因为,在xib中的按钮分配了它的目标,但没有保留。请参见此方法
checkout视图扩展了它的患者
,这里他保留第二个视图控制器的位置?他只是分配了viewcontroller。首先,如果从xib中添加按钮的目标,该方法类似于-(iAction)方法的名称,而不是-(void)方法名称。第二,当他点击第一个视图控制器的第一个按钮时,应用程序崩溃。第三,问题有点不清楚,可能我们两个都不理解:)不,不。你说的是
选择器
。我说的是
目标
。它就像
按钮。目标=self;
相反,它是用xib连接起来的。当您尝试单击位于firstviewcontroller视图层次结构视图中的第二个视图控制器按钮,但其目标为已解除分配的secondviewcontroller时。这就是为什么它会崩溃,因为它找不到目标内存。