2017-11-24 3 views
1

Ich versuche, meine Kanalliste lokal beizubehalten, also muss ich einen Weg finden, nur Kanäle abzufragen, die nach meiner letzten "Aktivität aktualisiert wurden ".SendBird - Kanallistenabfrage gefiltert nach Datum der letzten Änderung (property updatedAt)

Gruppenkanal verfügt über die Eigenschaft lastMessage, die angibt, wann die letzte Nachricht (falls vorhanden) empfangen wurde. Wie kann ich neue Kanäle abrufen, die nach der letzten letzten Massage erstellt oder aktualisiert wurden?

Derzeit ich unter meine Kanäle mit dem Schnipsel laden:

self.channelsListQuery = [SBDGroupChannel createMyGroupChannelListQuery]; 
[self.channelsListQuery setIncludeEmptyChannel: NO]; 
[self.channelsListQuery setOrder: (SBDGroupChannelListOrderLatestLastMessage)]; 

[self.channelsListQuery loadNextPageWithCompletionHandler: ^(NSArray<SBDGroupChannel*> *_Nullable channels, SBDError* _Nullable error) { 

    // My stuff... 
}]; 

Antwort

0

Sie dies, indem Sie tun können getNextMessagesByTimestamp:limit:reverse:messageType:customType:completionHandler: die Zeitstempel als param nimmt.

[self.channel getNextMessagesByTimestamp:yourLatestStoredTs limit:30 reverse:NO completionHandler:^(NSArray<SBDBaseMessage *> * _Nullable messages, SBDError * _Nullable error) { 
      if (error != nil) { 
       // Error! 
       return; 
      } 
}]; 
+0

Ich denke du hast mich nicht verstanden. Ich möchte die Kanalliste mit allen geänderten Gruppenkanälen nach meiner letzten letzten Nachricht auf meinen lokalen Daten erhalten. In Ihrem Beispiel muss ich Nachrichten von einem bestimmten Kanal erhalten, ich denke, dass es neue Gruppen-Kanal-Gespräche ignorieren würde. –

0

hatte ich die gleiche Anforderung nach neuester Aktivitätsgruppe Kanäle zu sortieren und verwendet, um die Sort() Methode auf der Kanalanordnung dieses Problem zu lösen.

Sobald das Channel-Array von [SBDGroupChannel] gefüllt ist und direkt bevor die Tabellenansicht neu geladen wird, sortieren Sie das Array.

Diese sortiert meine Gruppenkanäle mit den neuesten zuerst.

self.groupChannelListQuery = SBDGroupChannel.createMyGroupChannelListQuery() 
    self.groupChannelListQuery?.limit = 20 
    self.groupChannelListQuery?.order = 
        SBDGroupChannelListOrder.latestLastMessage 

    self.groupChannelListQuery?.loadNextPage(completionHandler: { (channels, error) in 
     if error != nil { 
      DispatchQueue.main.async { 
       self.refreshControl?.endRefreshing() 
      } 

      return 
     } 

     self.channels.removeAll() 
     self.cachedChannels = false 

     for channel in channels! { 
      self.channels.append(channel) 
     } 

     DispatchQueue.main.async { 
      if self.channels.count == 0 { 
       self.tableView.separatorStyle = 
        UITableViewCellSeparatorStyle.none 
       self.noChannelLabel.isHidden = false 
      } 
      else { 
       self.tableView.separatorStyle = 
         UITableViewCellSeparatorStyle.singleLine 
       self.noChannelLabel.isHidden = true 
      } 

      **self.channels.sort(by: { (channelA, channelB) -> Bool in 
        return channelA.createdAt > channelB.createdAt 
      })** 
      self.refreshControl?.endRefreshing() 
      self.tableView.reloadData() 
     } 
    }) 
Verwandte Themen