【发布时间】:2015-04-22 02:39:20
【问题描述】:
我有一个简单的消息传递应用程序,我在 NSUserDefaults 中保留了一个 BOOL:user 字典,它仅表示该对话中是否发生了“新”事件。例如{YES:12343},表示用户123432有新消息,否则NO。
当用户相互交互时,我会相应地更新该词典和我的视图。当我离开应用程序时,将字典保存到NSUserDefaults。当我回来时,我只是加载它。一切顺利,期待一件事。
当我点击对话打开它时,我将该布尔值设置为NO(因为我假设用户已阅读该消息)并将修改后的字典再次保存到NSUserDefaults。
Debug 显示字典在保存时是最新的,但是当我点击“返回”按钮时,视图会从 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];
}
【问题讨论】:
标签: ios objective-c dictionary nsuserdefaults