Chat / iOS
Chat iOS v4
Chat iOS
Chat
iOS
Home
/
Chat
/
iOS
/
Local caching
This is the new Docs for Chat SDK v4 for iOS. To see the previous Docs, click here.

Group channel collection

A GroupChannelCollection instance allows you to swiftly create a channel list view that remains up to date on all channel-related events. This page explains how to draw a view using the collection.


Create a collection

You can create a GroupChannelCollection instance through the createGroupChannelCollection() method.

First, create a GroupChannelListQuery instance through the SendbirdChat.createMyGroupChannelListQuery() method and its setters. This determines which channel to include in the channel list and how to list channels in order.

Once the collection is created, you should call loadMore(completionHandler:).

class CustomViewController: ViewController {
    var collection: GroupChannelCollection?

    // ...
    
    func createGroupChannelCollection() {
        // First, create a GroupChannelListQuery instance.
        let query = GroupChannel.createMyGroupChannelListQuery { params in
            params.includeEmptyChannel = true
            params.order = .chronological   // Acceptable values are chronological, latestLastMessage, 
            params.includeMemberList = true // channelNameAlphabetical, and channelMetaDataValueAlphabetical.
            params.includeMetaData = true   // You can add other params setters.
            params.includeFrozenChannel = true                                
        }

        // Then create a GroupChannelCollection instance.
        self.collection = SendbirdChat.createGroupChannelCollection(query: query)
    }
}

Pagination

A GroupChannelCollection instance retrieves more channels to display in the view through the loadMore(completionHandler:) method.

Whenever a scroll reaches the bottom of the channel list view, the loadMore() method should be called and the hasMore method first checks if there are more channels to load. If so, loadMore(completionHandler:) fetches them.

The loadMore(completionHandler:) method should also be called after you've created a GroupChannelCollection instance.

class CustomViewController: ViewController {
    var collection: GroupChannelCollection?
    
    // ...
    
    func loadMore() {
        guard let collection = self.collection else {
            return
        }
        
        // Check whether there are more channels to load before calling loadMore().
        if collection.hasNext {
            collection.loadMore { channels, error in
                if error != nil {
                    // Handle error.
                    return
                }

                // Add channels to your data source.
            }
        }
    }
}

Channel events

Use the GroupChannelCollectionDelegate methods to determine how the client app reacts to channel-related events.

This is called whenever a new channel is created as a real-time event or changelog sync is prompted when the client app is back online.

The following table shows possible cases where each event handler can be called.

EventCalled when

channelCollection(_:context:addedChannels:)

- A new group channel is created as a real-time event.
- New group channels are fetched through changelog sync.

channelCollection(_:context:updatedChannels:)

- The channel information that is included in the user's current chat view is updated as a real-time event.
- Channel info update is detected through changelog sync.

channelCollection(_:context:deletedChannelURLs:)

- A group channel is deleted as a real-time event.
- Channel deletion is detected through changelog sync.

class CustomViewController: UIViewController {
    func createGroupChannelCollection() {
        // First, create a GroupChannelListQuery instance.
        let query = GroupChannel.createMyGroupChannelListQuery { params in
            params.includeEmptyChannel = true
            params.order = .chronological   // Acceptable values are chronological, latestLastMessage, 
            params.includeMemberList = true // channelNameAlphabetical, and channelMetaDataValueAlphabetical.
            params.includeMetaData = true   // You can add other params setters.
            params.includeFrozenChannel = true 
        }

        // Then create a GroupChannelCollection instance.  
        self.collection = SendbirdChat.createGroupChannelCollection(query: query)

        // Set the delegate.
        self.collection?.delegate = self
    }
}

extension CustomViewController: GroupChannelCollectionDelegate {
    func channelCollection(_ collection: GroupChannelCollection, context: ChannelContext, addedChannels channels: [GroupChannel]) {
        // Add new channels to your data source.
    }

    func channelCollection(_ collection: GroupChannelCollection, context: ChannelContext, updatedChannels channels: [GroupChannel]) {
        // Update the existing channels in your data source.
    }

    func channelCollection(_ collection: GroupChannelCollection, context: ChannelContext, deletedChannelURLs: [String]) {
        // Delete the channels with the matching deletedChannelURLs
        // from your data source.
    }
}

Dispose of the collection

The dispose() method should be called when you need to clear the current channel list view.

class CustomViewController: ViewController {
    var collection: GroupChannelCollection?
    
    // ...
    
    func disposeCollection() {
        self.collection?.dispose()
    }
}