为什么在viewdidload之前调用IBAction?

时间:2014-04-30 06:10:11

标签: objective-c ibaction

我有一个IBAction方法,当按下一个按钮时会调用它。但是当调用UIViewController时,在viewdidload之前首先调用IBAction方法。我检查了我的代码,没有任何地方我特别称之为IBAction方法。

在viewdidload之前调用方法的原因是什么?为什么会这样?

谢谢。 .H

 @interface VC_PatientInfo : M_SwipeInterface

的.m

  @implementation VC_PatientInfo
    static M_PatientRow* patient;
    NSMutableArray*activeDrugList;
    NSInteger orderId;
    - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
    {
        self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
        if (self) {
            // Custom initialization
        }
        return self;
    }
    +(NSInteger)getOrderId{
        return orderId;
    }
    +(void)setOrderId:(NSInteger)oId{
        orderId=oId;
    }
    - (void)viewDidLoad
    {
        orderId=0;
[super viewDidLoad];
        patient= [VC_PatientList getPatient];
        activeDrugList = [[NSMutableArray alloc]init];
        activeDrugList=[DAO_GetPatientActiveDrugs drug:[VC_Login getGuid] visit_id:[VC_PatientList getPatient].visit_id];
        if([VC_Login is_from_monitoring]){
            [DAO_InsertMonitoriingList patient:[VC_Login getGuid] pId:[self.pId_lbl.text integerValue]];
            [self.txt_monitoring setText:@"Takip Listemden Çıkar"];
            self.txt_monitoring.textColor= [UIColor redColor];

        }
        // Do any additional setup after loading the view.
    }

    +(NSMutableArray*)refreshActiveDrugs{

        activeDrugList=[DAO_GetPatientActiveDrugs drug:[VC_Login getGuid] visit_id:[VC_PatientList getPatient].visit_id];
        return activeDrugList;
    }
    +(NSMutableArray*)getActiveDrugList{
        return activeDrugList;
    }
    - (IBAction)call_DrugOrder:(id)sender {
        [Global setVC:@"vc_drugorder"];
        [self callVC];
    }
    - (IBAction)setMonitoringList:(id)sender {
        if([self.txt_monitoring.text isEqualToString:@"text1"]){
            [DAO_InsertMonitoriingList patient:[VC_Login getGuid] pId:[self.pId_lbl.text integerValue]];
            [self.txt_monitoring setText:@"text2"];
            self.txt_monitoring.textColor= [UIColor redColor];
        }else{
            [DAO_RemoveMonitoriingList patient:[VC_Login getGuid] pId:[self.pId_lbl.text integerValue]];
            [self.txt_monitoring setText:@"text1"];
            self.txt_monitoring.textColor= [Global colorWithHexString:@"99CC00"];
        }
    }


    - (IBAction)setViewSecret:(id)sender {
        if(self.viewSecret.frame.size.height==143 )
           [self.viewSecret setFrame:CGRectMake(self.viewSecret.frame.origin.x,
                                               self.viewSecret.frame.origin.y,
                                               self.viewSecret.frame.size.width,
                                               0)];
        else
            [self.viewSecret setFrame:CGRectMake(self.viewSecret.frame.origin.x,
                                                 self.viewSecret.frame.origin.y,
                                                 self.viewSecret.frame.size.width,
                                                 143)];

    }
    - (IBAction)goBack:(id)sender {
        [self dismissViewControllerAnimated:NO completion:nil];
    }
    - (IBAction)callAllergyVC:(id)sender {
        [Global setVC:@"vc_patientallergy"];
        [self callVC];
    }
    - (IBAction)callDiagnosisVC:(id)sender {
        [Global setVC:@"vc_patientdiagnosis"];
        [self callVC];
    }
    - (IBAction)callVCOldOrder:(id)sender {
        [Global setVC:@"vc_oldorder"];
        [self callVC];
    }

    - (void)didReceiveMemoryWarning
    {
        [super didReceiveMemoryWarning];
        // Dispose of any resources that can be recreated.
    }

    @end

1 个答案:

答案 0 :(得分:4)

有些事情你可以检查,试图解决这个问题:

主叫方

转到方法的实现,并在其中的代码行上插入插入符号。在主窗口的左上角没有单击带有黑色和灰色矩形的小按钮(箭头左侧)并检查您的caode中是否有人调用此方法。

你不会在这里看到插座 - 所以如果Callers选项是灰色的(如下图所示) - 你很好。

callers

方法调用堆栈

尝试在方法实现的第一行放置断点。当断点停止编码时,在导航器窗格中的左侧,在调试器下面,您可以看到方法调用其他方法来调用方法的确切顺序。大多数机会你只需要退后一步(只需点击该行就可以看到它发生的位置 - 顺便说一下,这有点像时间机器(或范围机器?),你可以看到它的状态是什么范围内的对象。)

call stack

物业名店

在点击该小灰色圆圈时,转到定义插座的位置(在.h.m文件中)。这将显示与该方法/属性的所有 outlet 连接(在下图中我单击了一个属性,但方法的开头将是相同的。)

Property Outlets

NIB /故事板连接

打开NIB / Storyboard文件,然后单击View Controller本身(左侧文档大纲链中的顶部项目,另一个选项是Ctrl + Shift + Mouse Click查看IB中的控制器,然后从下拉菜单中选择View Controller。

Storyboard

现在在右侧(在“工具”窗格中)转到“连接检查器”(最右边的一个),以查看视图控制器中所有内容的所有连接。检查方法以查看是否有任何连接不应该是。

enter image description here