- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在为我的项目使用模拟器。当用户登录时,我使用 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/
几周前,我安装了一个新的 ssl 证书来替换一个过期的证书。 .crt 和 .key 的文件名保持不变。只是内容变了。 现在,当我访问我的网站时,它说证书已过期,我看到它正在使用旧的证书链。我可以确认
这个问题在这里已经有了答案: Make namespaces backwards compatible in PHP (4 个回答) 8 年前关闭。 我真的很想在我的工作流程中采用命名空间。据我了解,
我从 CN1 开始,然后以 Todo App 为例。当我在 Netbeans 中运行 de app 时,只出现一个空白表单,我更改了主题,添加了一个 jpg 图像并使用旧的 GUI Builder 在
我想知道是否有一些 Laravel 人员可以帮忙。 我有一个表单,其中有 2 个单选按钮,当表单提交时,它会通过验证器,如果验证器失败,它会返回表单,使用输入填充字段并显示错误消息。 我似乎无法对单选
我正在使用 Java 中没有泛型的旧代码。 hashMap 是在该代码中定义的,没有泛型,例如: Map A = new HashMap(); 在这段代码中,我想如何确定要在键和值中放入什么内容,以及
我想问一个关于项目兼容性的问题。我的论文项目是在Windows Vista和XP上在JRE 1.6和JDK 1.6下开发的。该项目使用Java新套接字。今天我尝试在 Windows 8(64 位)机器
有谁知道一个脚本可以将旧的 Products 命名空间样式 Plone 附加组件包装到 Egg 中吗? 生成setup.py 创建目录结构 还需要采取其他措施吗? 鸡蛋化过程中有什么陷阱吗? 最佳答案
我已经运行 MySQL 5.6.12 一段时间了。我决定将我的 WAMP 服务器更新到最新的 PHP 版本。 在此过程中,它还将 MySQL 更新到 5.6.17,保留 .12 数据,但无法访问。 如
最近,我一直在尝试根据互联网上的各种旧教程编写论坛代码,但是我最近遇到了一个问题 - 尽管我完全按照教程所述进行操作,但我收到了空格错误。我认为这可能是因为某些 MySQL 命令可能已更改。如果有人可
我正在创建对 Count 表的查询。 $Month = $_POST['Month']; $query = "SELECT ANY_VALUE(AD) AS ad, COU
如果我使用 mysqldump 工具备份旧版本的 MySql 数据库,是否存在任何已知风险?例如,如果我在生产机器上使用 mysqldump 5.6 来备份 MySql 5.X 数据库。 最佳答案 有
当将 columnsData 值分配给 columns 时,我有两个 JSON 对象 columnsData 和 columns,这两个值都会更改。 var columnsData = [
我有一个需要在 gcc 4.4 上编译的多线程应用程序,我不允许使用 c++0x 标志。 我希望一个变量以原子方式运行,但不幸的是没有 C++0x 标志我无法使用 atomic在 C++ 中。 我试过
我可以借助广播事件(ACTION_TIME_CHANGED 和 ACTION_DATE_CHANGED)获取时间更改事件。 我需要在时间更改后获取之前的时间。例如,当前时间是 10:00。我要把时间改
我正在尝试在我的 Android 应用程序中创建一个 DatePickerDialog,但是当我创建一个 DatePickerDialog 时,我收到以下消息:Call requires API le
{!! Form::open(array('route' => 'posts.store', 'data-parsley-validate' => '')) !!} {{ Form::labe
我的问题与 iOS 周围的蓝牙技术有关。我看过关于蓝牙低功耗 101、新功能、基础知识等的 WWDC,以及关于使用 iOS 5 及更高版本中可用的 CoreBluetooth 框架的内容。我浏览了不同
我有一个有五个屏幕的应用。 在每个屏幕上,我在 viewDidLoad 中从服务器访问数据。 在每个屏幕上我都有下一个按钮。 当我从屏幕一转到屏幕五(通过单击下一步 4 次)时,在 NSLog 中,我
我最近在一家网络报纸找到了一份工作。在网站上,我们有一个非常古老且重要的 Symfony 应用程序,它是为一位年长的开发人员编写的,已经消失很久了。该应用程序是神圣的:是报纸收入的血液。问题是我们没有
我相信我已经找到了一种方法来实现类似可移植 C89 中众所周知的“struct hack”的方法。我很好奇这是否真的严格符合 C89。 主要思想是:我分配足够大的内存来容纳初始结构和数组元素。确切的大
我是一名优秀的程序员,十分优秀!