如何准确地保存和检索最后看到的消息时间戳 - plist 或 NSUserDefaults
How exactly to save and retrieve last seen message timestamp - plist or NSUserDefaults
我有两个 UIViewController。在 FirstViewController 中,我从 firebase 下载 groupsInfo 数据并在 UITableView 中显示详细信息(groupName,lastMessage),并且还有一个标签 "lastMessageTime"(此信息将来自 SecondViewController). 一旦我点击 UITableView 单元格,它就会转到详细信息页面 SecondViewController,在这里我根据点击的 groupID 下载 messageInfo。当我离开 SecondViewController 时,我想将该特定 groupID 的最后一条消息时间存储在常见的地方(plist 或 NSUserDefaults),并在 FirstViewController 或其他一些 [=21] 中检索信息=](后期)。保存的数据不应该被删除,而且我应该能够更新(如果特定键的值已经存在)"lastMessageTime" 每当有新消息时任何特定的 groupID。
下面是我试过的代码,但不确定这是否是最好的方法。如果您能告诉我有效处理此要求的最佳方法,那就太好了。
第二ViewController:
-(void)viewWillDisappear:(BOOL)animated{
[self updateLastMessageSeenTime:groupID];
}
-(void)updateLastMessageSeenTime:(NSString*)groupID
{
FIRDataSnapshot *snapshot = [self.messageArray lastObject];
NSMutableDictionary *lastSeenMessageTime = [[NSMutableDictionary alloc]init];
NSString *lastMessageTime = snapshot.value[@"timeStamp"];
[lastSeenMessageTime setValue:lastMessageTime forKey:groupID];
NSUserDefaults *lastSeenMessageTimeUserDefaults = [NSUserDefaults standardUserDefaults];
[lastSeenMessageTimeUserDefaults setObject:lastSeenMessageTime forKey:@"lastMessageTimeArrayKey"];
[lastSeenMessageTimeUserDefaults synchronize];
}
以上方法清除所有以前的数据。例如,如果针对不同的 groupID 访问 SecondViewController 两次,则先前的 groupID 的 lastMessageTime 将被删除并替换为新的 groupID。
您需要先从 NSUserDefaults
获取字典,如果不存在,则 init
获取新字典。试试这个。
-(void)updateLastMessageSeenTime:(NSString*)groupID
{
FIRDataSnapshot *snapshot = [self.messageArray lastObject];
NSUserDefaults *lastSeenMessageTimeUserDefaults = [NSUserDefaults standardUserDefaults];
NSString *key = @"lastMessageTimeArrayKey";
NSMutableDictionary *lastSeenMessageTime = [[lastSeenMessageTimeUserDefaults objectForKey: key] mutableCopy];
if (!lastSeenMessageTime) {
lastSeenMessageTime = [[NSMutableDictionary alloc] init];
}
NSString *lastMessageTime = snapshot.value[@"timeStamp"];
[lastSeenMessageTime setValue:lastMessageTime forKey:groupID];
NSUserDefaults *lastSeenMessageTimeUserDefaults = [NSUserDefaults standardUserDefaults];
[lastSeenMessageTimeUserDefaults setObject:lastSeenMessageTime forKey: key];
[lastSeenMessageTimeUserDefaults synchronize];
}
我有两个 UIViewController。在 FirstViewController 中,我从 firebase 下载 groupsInfo 数据并在 UITableView 中显示详细信息(groupName,lastMessage),并且还有一个标签 "lastMessageTime"(此信息将来自 SecondViewController). 一旦我点击 UITableView 单元格,它就会转到详细信息页面 SecondViewController,在这里我根据点击的 groupID 下载 messageInfo。当我离开 SecondViewController 时,我想将该特定 groupID 的最后一条消息时间存储在常见的地方(plist 或 NSUserDefaults),并在 FirstViewController 或其他一些 [=21] 中检索信息=](后期)。保存的数据不应该被删除,而且我应该能够更新(如果特定键的值已经存在)"lastMessageTime" 每当有新消息时任何特定的 groupID。
下面是我试过的代码,但不确定这是否是最好的方法。如果您能告诉我有效处理此要求的最佳方法,那就太好了。
第二ViewController:
-(void)viewWillDisappear:(BOOL)animated{
[self updateLastMessageSeenTime:groupID];
}
-(void)updateLastMessageSeenTime:(NSString*)groupID
{
FIRDataSnapshot *snapshot = [self.messageArray lastObject];
NSMutableDictionary *lastSeenMessageTime = [[NSMutableDictionary alloc]init];
NSString *lastMessageTime = snapshot.value[@"timeStamp"];
[lastSeenMessageTime setValue:lastMessageTime forKey:groupID];
NSUserDefaults *lastSeenMessageTimeUserDefaults = [NSUserDefaults standardUserDefaults];
[lastSeenMessageTimeUserDefaults setObject:lastSeenMessageTime forKey:@"lastMessageTimeArrayKey"];
[lastSeenMessageTimeUserDefaults synchronize];
}
以上方法清除所有以前的数据。例如,如果针对不同的 groupID 访问 SecondViewController 两次,则先前的 groupID 的 lastMessageTime 将被删除并替换为新的 groupID。
您需要先从 NSUserDefaults
获取字典,如果不存在,则 init
获取新字典。试试这个。
-(void)updateLastMessageSeenTime:(NSString*)groupID
{
FIRDataSnapshot *snapshot = [self.messageArray lastObject];
NSUserDefaults *lastSeenMessageTimeUserDefaults = [NSUserDefaults standardUserDefaults];
NSString *key = @"lastMessageTimeArrayKey";
NSMutableDictionary *lastSeenMessageTime = [[lastSeenMessageTimeUserDefaults objectForKey: key] mutableCopy];
if (!lastSeenMessageTime) {
lastSeenMessageTime = [[NSMutableDictionary alloc] init];
}
NSString *lastMessageTime = snapshot.value[@"timeStamp"];
[lastSeenMessageTime setValue:lastMessageTime forKey:groupID];
NSUserDefaults *lastSeenMessageTimeUserDefaults = [NSUserDefaults standardUserDefaults];
[lastSeenMessageTimeUserDefaults setObject:lastSeenMessageTime forKey: key];
[lastSeenMessageTimeUserDefaults synchronize];
}