仅在第二次加载视图时运行函数

时间:2011-06-11 22:26:06

标签: objective-c ios cocoa-touch uiviewcontroller uitabbarcontroller

我正在创建一个iOS应用程序,它在标签栏控制器上有一个登录系统。标签栏作为根控制器加载,如果用户未登录,则登录子视图将填充屏幕。由于标签栏控制器的第一个视图已加载,因此viewWillAppear:也是如此。我使用viewWillAppear:在每次加载时重新加载表视图。该系统运行良好。

但是,我想知道如何在第二次加载时(即在用户登录后)运行一个函数(void),以提供特定于用户的表视图而不是在每个视图上加载一个 - 这就是为什么我没有使用viewDidLoad:,因为它只运行一次。

3 个答案:

答案 0 :(得分:1)

添加一个整数实例变量,在每个viewWillAppear上递增它,并仅在实例变量大于1时运行您的函数

答案 1 :(得分:1)

是的,我有更好的&简单的解决方案,而不是采取一些变量,因为当我们重新启动应用程序时不会保留最后的值。

为此您需要使用数据库,但需要大量编码。最好使用NSUserDefaults来存储系统首选项。

Write this in your viewWillAppear:

if([[NSUserDefaults standardUserDefaults]valueforKey:@"key"]==nil)
{
    NSUserDefaults *default = [NSUserDefaults standardUserDefaults];

    [default setValue:@"1" forKey:@"key"];
    [default synchronize];
}
else
{
    NSLog(@"Once you make successful login this value wont change till you make logout");
}

& now just change the value in NSUserDefaults while doing logout.


NSLog(@"%@",[[NSUserDefaults standardUserDefaults] valueForkey:@"key"]); // way to access this system dictionary.

有关 NSUserDefaults教程

的进一步参考

希望这能解决某些问题。 :)

答案 2 :(得分:0)

如果您保留计数器,它将无法正常工作,因为用户可以在未登录的情况下多次打开您的视图。那么您应该如何保留用户的会话信息。当用户登录时填写此会话信息,否则不填写。每次用户想要打开此选项卡时,请检查此信息。