当用户启动应用程序时,我希望它显示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");
}
但是当用户使用:
关闭stockholm.xib时[self dismissModalViewControllerAnimated:YES];
动画完成后,应用程序崩溃。 原因是,我猜,viewDidAppear调用了两次,因此它试图打开最近关闭的xib文件。
现在,如何调用视图确实只出现一次?那么当用户从斯德哥尔摩回来时,viewDidAppear将不会被调用?任何其他解决方案?
thanx:)
答案 0 :(得分:14)
您可以尝试使用viewDidLoad:
方法而不是viewDidAppear
移动所有功能。那只发射一次。除非你有理由不去......?
编辑:更多代码以显示我在评论中的含义
<。>文件中的:
BOOL firstTime;
<。>文件中的:
-(void)viewDidLoad {
NSLog(@"viewDidLoad actually fired");
//...
firstTime = YES;
}
-(void)viewDidAppear {
//...
if(firstTime){
//show it
firstTime = NO;
}
}
答案 1 :(得分:6)
如果您的班级有以下字段,您也可以使用GCD:
@interface MyClass {
dispatch_once_t once;
}
@end
@interface MyClass {
- (void)viewDidAppear:(BOOL)animated {
dispatch_once(&once, ^{
// do business
});
}
@end
答案 2 :(得分:1)
您可以将加载BOOL的属性添加到viewcontroller,在viewdidload中将其设置为false,然后将viewDidAppear方法设置为:
- (void)viewDidAppear:(BOOL)animated {
if (!loaded) {
//code
} else {
return;
}
loaded = YES;
}
这适合我。