如何准确地保存和检索最后看到的消息时间戳 - 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];
}