Hi, we are currently implementing a similar version to the CouchChat Demo 
app and struggle with a small detail. We want to limit the amount chat 
messages displayed in order to reduce the memory footprint. Similar to the 
iMessage app we want to add a "load earlier messages" feature that loads 
additional (older) messages on demand.

>From a high-level perspective we think it might make sense to have a global 
variable, lets say _messageCount, that starts with 25 and increases by 25 
each time the user taps "load earlier messages". It seems very easy to do 
but we struggle with the query logic. 

Looking at the CouchChat app we can run the query and limit the output but 
the limit always starts at the oldest message and not the newest one 
obviously. Using start key  and limit returns nothing and so does 
descending order = YES.

Does anyone have any pointers to how to get this accomplished?

Thanks Christoph

Building the query

#pragma mark - MESSAGES:

- (CBLQuery*) chatMessagesQuery

{

    CBLQuery* query = [[self.database viewNamed: @"chatMessages"] 
createQuery];

    query.startKey = @[self.chatID];

    query.endKey = @[self.chatID, @{}];

    query.mapOnly = true;

    return query;

}


//it doesn't work as it limits the scope to the first 25messages

- (void) reloadFromQuery

{

    //set initial _messageLimit to 25

    _query.limit = _messageLimit;

    CBLQueryEnumerator *rowEnum = _query.rows;

    if (rowEnum)

    {

        _rows = rowEnum.allObjects;

        [self.collectionView reloadData];

        [self scrollToBottomAnimated:YES];

        [_chatRoom markAsRead];

    }

}


//it doesn't work as it returns nil

- (void) reloadFromQuery

{

    //set initial _messageLimit to 25

    //_totalAmount of rows

    _query.descending = YES;

    _query.startKey = _totalAmount;

    _query.endKey = _totalAmount - _messageLimit;

    CBLQueryEnumerator *rowEnum = _query.rows;

    if (rowEnum)

    {

        _rows = rowEnum.allObjects;

        [self.collectionView reloadData];

        [self scrollToBottomAnimated:YES];

        [_chatRoom markAsRead];

    }

}


-- 
You received this message because you are subscribed to the Google Groups 
"Couchbase Mobile" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/mobile-couchbase/c878b77a-e5b7-4a13-a9b3-6e4e10b2a38b%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to