haf*_*dg3 7 iphone sdk xib viewdidappear
当用户启动应用程序时,我希望它显示stockholm.xib,它在此处执行:
-(void)viewDidAppear:(BOOL)animated{
[super viewDidAppear:animated];
NSUserDefaults *startPage =[NSUserDefaults standardUserDefaults];
NSString *page =[startPage stringForKey:@"page"];
NSLog(page);
if(page==nil)
{
//Do nothing
}
else if ([page isEqualToString:@"Default"])
{
//Do nothing
}
else if ([page isEqualToString:@"Stockholm"])
{
NSLog(@"going to Stockholm");
Stockholm *Start =[[Stockholm alloc]initWithNibName:nil bundle:nil];
[self presentModalViewController:Start animated:YES];
}
else {
NSLog(@"HAHA");
}
Run Code Online (Sandbox Code Playgroud)
但是当用户使用以下方法关闭stockholm.xib时:
[self dismissModalViewControllerAnimated:YES];
Run Code Online (Sandbox Code Playgroud)
动画完成后,应用程序崩溃.原因是,我猜,viewDidAppear调用了两次,因此它试图打开最近关闭的xib文件.
现在,我如何调用视图确实只出现过一次?那么当用户从斯德哥尔摩回来时,viewDidAppear将不会被调用?还有其他方法吗?
thanx :)
Dim*_*ris 14
您可以尝试移动方法中的所有功能viewDidLoad:而不是viewDidAppear.那只发射一次.除非你有理由不......
编辑:更多代码,以显示我在评论中的意思
在.h文件中:
BOOL firstTime;
Run Code Online (Sandbox Code Playgroud)
在.m文件中:
-(void)viewDidLoad {
NSLog(@"viewDidLoad actually fired");
//...
firstTime = YES;
}
-(void)viewDidAppear {
//...
if(firstTime){
//show it
firstTime = NO;
}
}
Run Code Online (Sandbox Code Playgroud)
如果您的班级有以下字段,您也可以使用GCD:
@interface MyClass {
dispatch_once_t once;
}
@end
@interface MyClass {
- (void)viewDidAppear:(BOOL)animated {
dispatch_once(&once, ^{
// do business
});
}
@end
Run Code Online (Sandbox Code Playgroud)