2016-08-24 83 views
1

在我的应用程序中,我有一些功能:login,getNews,getWeather。最后两个函数只能在用户登录时执行。如果用户已经登录,我不想每次登录,所以如果两个最后的函数返回一个未登录的错误,我想登录,然后执行需要登录的函数的队列。 这只是一个例子,实际的代码要长得多,而依赖于登录的函数不止两个。我想知道处理这种情况的最佳解决方案。仅在登录时才获取数据

+0

可以使用dispatch_group为Web服务调用序列。 – vivekDas

回答

0

例如,您可以存储UserDefaults登录用户的状态。并根据这个调用你想要的任何功能。

+0

也许我不清楚。我知道,但我存储饼干..有时我可以注销。 – Zac

0

当用户登录后,您可以将其凭证存储在钥匙串中。 看看这里一个简短的教程:

Tutorial One

Tutorial Two

然后,您可以每次检查是否存储了自己的凭证并自动登录,然后执行getNews和getWeather函数。

+0

我的问题是关于GDC,我不想每次登录。我想登录一次,然后存储sessionid cookie,虽然我不会因为会话过期而被注销,但我想继续使用它来避免无用的请求。 – Zac

+0

@Zac,用户是否登录到某个外部服务器? –

+0

是的,事实上它超出了我的控制范围 – Zac

0

要保存您的应用程序启动之间的数据,你可以尝试任何以下两种方法:

1)很简单的解决办法是在你的UserDefaults用户数据存储在用户词典的形式。前者为 。 NSUserDefaults.standardUserDefaults().setObject(userDict, forKey: @"User Dictionary")。如果你的userDict很大或很难制作,这可能会很痛苦。

2)另一种解决方案可以是使用存档器存储用户数据。您可以从这个link制作您的自定义存档器。

0

因此,当用户成功登录使用NSUserDefaults记录value = 1

实施例;

使用该代码添加prefs

let prefs:NSUserDefaults = NSUserDefaults.standardUserDefaults() 

登录成功后set登录object1

let logged = 1 
    prefs.setObject(logged, forKey: "logged") 

并检查用户是否loggednot logged显示登录

您可以在下面的检查记录添加代码里面到处项目

if prefs.valueForKey("logged") as! Int == 1 { 

    }else{ 

     // go login 
    } 

对于logout可以use;

let logged = 0 
    prefs.setObject(logged, forKey: "logged") 

感谢