我有一个简单的消息传递应用程序,并且我在NSUserDefaults中保留了BOOL:user
的字典,它只代表某些内容" new"在那次谈话中发生了。例如,{YES:12343}
表示用户123432有新消息,否则为NO
。
当用户互相交流时,我会相应地更新该词典和我的视图。当我离开应用程序时,将字典保存到NSUserDefaults
。当我回来时,我只是加载它。一切顺利,期待一件事。
当我点击会话打开它时,我将该布尔值设置为NO
(因为我假设用户已阅读该消息)并将该修改后的字典再次保存到NSUserDefaults
。
调试显示字典在保存时是最新的,但是当我点击"返回"按钮,视图从NSUserDefaults
重新加载字典,该字典不是最新的。因此,我的观点显示,对话显然是未读的。
现在棘手的部分发挥作用。如果我再次这样做(有时一次,有时两次),字典最终会将对话显示为已读(因为字典最终将是最新的)。
这告诉我一些事情:
我无法理解的是:我应该何时保存该字典以及如何保存?我将其加载到viewWillAppear
,并将其保存在didSelect
中。不是正确的做法吗?
一些代码:
我的didSelect
:
pushDict是一个NSMutableDictionary
对象,此时永远不会为零
if (pushDict != nil){
[pushDict setObject:[NSNumber numberWithBool:NO] forKey:_friendship.objectId];
[[NSUserDefaults standardUserDefaults]setObject:pushDict forKey:@"pushDict"];
}
加载字典:
if([[NSUserDefaults standardUserDefaults]dictionaryForKey:@"pushDict"]){
pushDict = [[NSMutableDictionary alloc]initWithDictionary:[[NSUserDefaults standardUserDefaults]dictionaryForKey:@"pushDict"]];
}else{
pushDictFeel = [NSMutableDictionary alloc]init];
}
答案 0 :(得分:2)
首先,NSUserDefaults
不应该是您保存此类信息的地方。尝试为此设置一个好的数据模型。但是,由于您缺少此行,您的错误可能会发生:
[[NSUserDefaults standardUserDefaults] synchronize];
从您的代码我可以看到您正在尝试保存NSMutableDictionary
。这不起作用,因为NSUserDefaults
返回的对象是不可变的。看看这个:
NSMutableDictionary in NSUserDefaults
答案 1 :(得分:0)
您需要为[NSUserDefaults standardUserDefaults]调用synchronize
if (pushDict != nil){
[pushDict setObject:[NSNumber numberWithBool:NO] forKey:_friendship.objectId];
[[NSUserDefaults standardUserDefaults]setObject:pushDict forKey:@"pushDict"];
[[NSUserDefaults standardUserDefaults] synchronize];
}