Login NSUserDefaults赢得';不能删除密钥的对象

Login NSUserDefaults赢得';不能删除密钥的对象,login,persistence,nsuserdefaults,Login,Persistence,Nsuserdefaults,当用户登录到我的应用程序时,我从JSON服务器下载一个令牌,并将其存储在NSUserDefaults中,如下所示: [[NSUserDefaults standardUserDefaults] setValue:token forKey:TOKEN]; 当用户在后续页面中注销时,我调用此方法并返回登录屏幕: [[NSUserDefaults standardUserDefaults] setObject:@"" forKey:TOKEN]; (在此之前,我调用了[[NSUserDefault

当用户登录到我的应用程序时,我从JSON服务器下载一个令牌,并将其存储在NSUserDefaults中,如下所示:

[[NSUserDefaults standardUserDefaults] setValue:token forKey:TOKEN];
当用户在后续页面中注销时,我调用此方法并返回登录屏幕:

[[NSUserDefaults standardUserDefaults] setObject:@"" forKey:TOKEN];
(在此之前,我调用了[[NSUserDefaults standardUserDefaults]removeObjectForKey:TOKEN];)

无论我如何尝试删除此用户默认值,每当我加载我的应用程序时,它总是向我显示完整的令牌,而不是空字符串或空值

当我们四处阅读时,很明显这与读写周期有关?但即使我暂时离开它,钥匙依然存在。这是模拟器的问题吗


不管是什么原因,我该如何解决这个问题?

首先是缓存内存的问题。它只发生在xcode中,不应该发生在设备上。

您要呼叫吗

[[NSUserDefaults standardUserDefaults] synchronize];

在密钥被删除之后?可能您没有将更改持久化到数据库中。

能否详细说明如何加载应用程序?我尝试在removeObjectForKey前后记录该值,但效果良好:
[[NSUserDefaults standardUserDefaults]setValue:@“test”forKey:@“token”];NSLog(@“%@,[[NSUserDefaults standardUserDefaults]objectForKey:@“令牌”);[[NSUserDefaults standardUserDefaults]removeObjectForKey:@“令牌”];NSLog(@“%@,[[NSUserDefaults standardUserDefaults]objectForKey:@“令牌”)当我像那样记录它的时候,紧接着之前,紧接着之后,它从现有状态变为被删除状态。但是,如果我在关闭应用程序并重新加载后访问该数据,该字符串将再次出现!(过了一段时间,它删除了它,现在不再保存了)它只加载到一个视图控制器中,所以我真的不明白问题出在哪里……当你说你重新加载了应用程序时,你的意思是再次从xcode运行项目吗?如果在
[NSUserDefaults standardUserDefaults]
中进行某些修改后立即重新运行项目,则在重新运行时可能仍保留旧值。此操作不应发生在设备上。看看下面的问题及其答案:虽然这不再是问题,但这就是方法。我真的应该更经常地阅读文档。谢谢你,我以后会用的。我给你的答案是正确的,是我的模拟器造成了这个问题,直到你真正编写单元测试,而这些测试不能在设备上运行。我们怎么知道测试实际上成功了呢?有没有人知道如何解决这个问题,以便我们能够正确地重置单元测试?因为这个错误,我几乎要发疯了。我的测试一直不及格,我认为这可能是一个线程问题,我已经在质疑我的存在和我的技能。几乎变成了厕所清洁工。我们能做什么?!