Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 方法只在viewDidApper中调用,但不在viewDidLoad中调用,为什么?_Ios_Objective C_Ios7_Viewdidload_Viewdidappear - Fatal编程技术网

Ios 方法只在viewDidApper中调用,但不在viewDidLoad中调用,为什么?

Ios 方法只在viewDidApper中调用,但不在viewDidLoad中调用,为什么?,ios,objective-c,ios7,viewdidload,viewdidappear,Ios,Objective C,Ios7,Viewdidload,Viewdidappear,我创建了一个基于值设置按钮标题的方法 打开viewController时需要调用此方法,当控制器再次出现时可能需要刷新此方法 所以我创建了这个方法,并在viewDidLoad和viewDidApper中调用了该方法,但似乎只有在我更改页面并返回到视图控制器时才会调用它 为什么? 我的代码是 - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. [self cont

我创建了一个基于值设置按钮标题的方法

打开viewController时需要调用此方法,当控制器再次出现时可能需要刷新此方法

所以我创建了这个方法,并在viewDidLoad和viewDidApper中调用了该方法,但似乎只有在我更改页面并返回到视图控制器时才会调用它

为什么?

我的代码是

- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
[self controlloRichieste];

......
}

-(void)viewDidAppear:(BOOL)animated{

[self controlloRichieste];
}


-(void)controlloRichieste{
//Numero richieste di contatto
NSString *numeroRichieste = @"1";

if([numeroRichieste isEqual:@"0"]){
    [_labelRequestNumber setTitle:@"Nessuna" forState:UIControlStateNormal];
} else {
    _labelRequestNumber.titleLabel.text = numeroRichieste;
    _labelRequestNumber.tintColor = [UIColor redColor];
}
//Fine Numero richieste di contatto
}

您还可以将该代码移动到
viewwillbeen
,以便每次显示时都调用它

- (void)viewWillAppear:(BOOL)animated {
  [super viewWillAppear:animated];

  [self controlloRichieste];
}
我现在看到问题了,试着换一种方法

-(void)controlloRichieste{
    //Numero richieste di contatto
    NSString *numeroRichieste = @"1";

    if([numeroRichieste isEqual:@"0"]){
        [_labelRequestNumber setTitle:@"Nessuna" forState:UIControlStateNormal];
    } else {
        _labelRequestNumber.tintColor = [UIColor redColor];
        [[_labelRequestNumber titleLabel]setText:numeroRichieste];
    }
    //Fine Numero richieste di contatto
}
更改设置按钮颜色,然后再更改其标题标签
文本



我为您制作了一个演示,希望对您有所帮助

当您第一次打开视图时,调用viewDidLoad和viewDidAppeare

每次打开视图时,当您按下或显示其他视图控制器并返回缅因州时,都会调用ViewDidAppare,此时会调用一个ViewDidAppare。 你应致电:

[super viewDidAppear:animated];

viewDidLoad仅在加载视图时调用,然后在解除分配视图并需要再次分配视图时调用。因此,大多数情况下,当您按下或显示其他视图控制器并返回缅因州时,不会调用一个viewDidLoad。

不要忘记调用
[超级VIEWDIDLEAMED:动画]在您的
视图显示:
方法中。我添加了[超级视图显示:动画];但是当我第一次打开viewController时,数字1出现了不到一秒钟,然后消失了。如果我更改了viewController,然后返回,数字1会正常出现,并且没有消失,那么您还有其他事情要做。添加一个断点,并按照代码进行操作,以查看何时调用了什么方法。另外,如果
labelRequestNumber
是一个属性,我建议您使用访问器方法(即使用
self.
而不是直接使用ivar访问属性)。如果我使用self而不是_labelRequestNumberTried来添加viewWillApper方法,结果相同,但问题应该是viewDid,我的错误。将它添加到ViewDidDisplay方法的开头。我现在的代码是:-(void)ViewDidDisplay:(BOOL)动画{[super ViewDidDisplay:动画];[self-ControlleriChieste];}-(void)ViewWillDisplay:(BOOL)动画{[super ViewWillDisplay:动画];[self-ControlleriChieste];}您不需要viewWillAppeare方法。如果删除,结果相同viewWillApper@Gualty我建议您添加一些日志,例如
NSLog(@“viewwillbeen called!!!”)我添加了日志功能,当我第一次打开视图时,它似乎同时加载了ViewDidDisplay和viewWillApper。每次文本出现不到一秒钟然后消失。日志显示但随后消失?仅从
视图调用它将出现
,您可以注释掉其他标签,一秒钟后不会消失标签文本,但如果我更改视图并返回,它不会消失我看到您硬编码了
数字签名
,您是否希望文本始终为红色的1?