如何保存和检索上次看到的消息时间戳 - plist或NSUserDefaults

时间:2017-11-05 10:46:31

标签: objective-c nsuserdefaults plist appdelegate

我有两个UIViewControllers。在FirstViewController中,我从firebase下载groupsInfo数据并在UITableView中显示详细信息(groupName,lastMessage)并再添加一个标签" lastMessageTime"(此信息将来自SecondViewController)。我点击了UITableView单元格,它转到详细页面SecondViewController,在这里我根据tapped groupID下载messageInfo。当我离开SecondViewController时,我想将普通的特定groupID的最后消息时间(plist或NSUserDefaults)存储起来,并在FirstViewController或其他一些ViewController(后期阶段)中检索信息。保存的数据不应该被删除,而且我应该能够更新(如果已存在特定密钥的值)" lastMessageTime"每当有新消息时,对于任何特定的groupID。

以下是我尝试的代码,但不确定这是否是最佳方法。如果能告诉我有效处理这一要求的最佳方法,那就太棒了。

SecondViewController:

-(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。

1 个答案:

答案 0 :(得分:0)

您需要首先从case when SUBSTR(C.VARIANT, 1, LENGTH(C.MANUFACTURER || ' ' || C.MODEL_GROUP)) = C.MANUFACTURER || ' ' || C.MODEL_GROUP then SUBSTR(C.VARIANT, 1+ LENGTH(C.MANUFACTURER || ' ' || C.MODEL_GROUP)) else s end 获取字典,如果它不存在,则NSUserDefaults新字典。试试这个。

init