gpt4 book ai didi

ios - Swift2 iOS - 注销当前用户并创建新用户,为新用户保留旧用户的默认值

转载 作者:行者123 更新时间:2023-11-28 12:33:41 25 4
gpt4 key购买 nike

我正在为我的项目使用模拟器。当用户登录时,我使用 NSUserDefaults 来确定他们将进入哪个级别。对于即

jack 下载了我的应用程序,创建了一个帐户,从第 1 级开始,购买了一些魔法,因为他购买了魔法,他现在可以跳过第 1 级。 jack 现在处于第 2 级并退出游戏。 Jack 注销并重新登录后,他现在将降落在 2 级。

在 LevelOneVC 中有一个 buyMagic 按钮,用于购买魔法/跳过等级。

在 SignInVC 中,我使用 NSUserDefaults.standardUserDefaults().boolForKey 来确定是否购买了魔法,在这种情况下它是 true 并且这将确定哪个级别派 jack 去。该 bool 值在 signInButton 中访问。

Jill 是 Jack 的 friend ,她借了他的手机,创建了一个帐户,她一登录就进入了 2 级。她应该进入 1 级,因为她是不同的用户并且显然有不同的 Firebase uid 然后是 Jack(我打印它们以确保)。

我使用 Firebase 作为后端,它成功地让用户登录和注销,并且他们都获得了不同的 uid 。但是,由于我使用的是模拟器,因此似乎正在记录 NSUserDefault 值,无论哪个用户登录,他们都将获得以前的用户值。

我还尝试在 SignUpVC 中将 bool 改回 false,但所做的只是在 Jill 注销并且 Jack 重新登录后,他再次从级别 1 开始。

仅供引用,我要澄清的是,我在 NSUserdefaults 中保存的唯一值是他们是否购买了魔法,而不是他们的电子邮件或购买信息等。

我想这些问题适用于任何其他设备特定信息,例如用户能够为我的应用指定的特定背景颜色或字体。我认为那不是服务器端数据,而是将它们保存在NSUserDefaults 中。

我是否应该在 NSUserDefaults 或我的 Firebase 后端中保存他们是否购买了魔法的信息?我哪里出错了?

Jill 降落在 2 层是因为她使用的是完全相同的设备吗?

除了使用后端之外,如果多个用户使用同一设备并且一旦 1 个注销并且之前值中的其他日志将不会被保存,我如何才能得到它

顺便说一句,我也尝试过将 单例类global bool 变量 一起使用,但出现了同样的问题。我没有包含它

应用委托(delegate):

class AppDelegate: UIResponder, UIApplicationDelegate {
//this is initially a false value
NSUserDefaults.standardUserDefaults().boolForKey("wasMagicBought")
}

登录VC

SignInController: UIViewController{

let magicPurchased = NSUserDefaults.standardUserDefaults().boolForKey("wasMagicBought")

@IBAction func signIn(sender: UIButton){
//firebase method to sign user in and handler with async_brings them inside based off of the NSUserDefaults value
dispatch_async(dispatch_get_main_queue()){
if magicPurchased{
//function to bring them to level 2
}else{
//function to bring them to level 1
//If it's their first time making an account or if they made an account but never made it pass level 1 without buying magic this should always run i.e. Jill.
}
}
}
}

LevelOneVC

LevelOneController: UIViewController{

@IBAction func buyMagic(sender: UIButton){
self.skipLevelOne()
}

func skipLevelOne(){
self.buyMagic()
//since they bought the magic I now log it in NSUserDefaults as true
NSUserDefaults.standardUserDefaults().setBool(true, forKey: "wasMagicBought")
}

func buyMagic(){
//code for the user to purchase the magic allows them to skip to level 2
}
}

注册VC注册 Controller :UIViewController{

@IBAction func signUp(sender: UIButton){
//code to sign user up
NSUserDefaults.standardUserDefaults().setBool(false, forKey: "wasMagicBought")
}

最佳答案

实际上,我认为这种类型的数据(购买)应该由您的后端保存。出于多种原因将它们存储在本地并不安全:其中之一是您需要在新用户登录时随时删除此 key ,这意味着您将丢失前一个用户的所有数据。

按照 Matt 的说法,如果 Jack 再次登录,将再次从级别 1 开始。

您可以决定是将此数据保留在 Firebase 上,还是可以构建更复杂的数据来存储,例如以用户 ID 为键的字典

purchaseDictionary: [String: Bool] = [
jackId: true,
jillId: false
]

如果您决定使用 NSUserDefaults 方式,您应该考虑到如果 Jack 卸载应用程序或更换 iPhone,他将丢失任何数据。

关于ios - Swift2 iOS - 注销当前用户并创建新用户,为新用户保留旧用户的默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41458248/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com