Search code examples
ioscore-datanspredicatensfetchedresultscontrollernsfetchrequest

NSFetchResultController to sort chat items in date (dd/mm/yyyy) sections and each section again sorted by dd/mm/yy hh:mm:ss


I am creating a chat application UI like whats app where I need to sort the chat messages and section them based on NSDate (DD/MM/YY).

Each distinct (DD/MM/YY) section names will have items sorted again on the timestamp containing this date.

How can I achieve this in NSFetchResultsController. I was successful achieving this using Distinct Query to get all the Chat Objects dates that match the DD/MM/YYYY and find section names.

Then again make a query to DB to find all chats matching the chat objects timestamp for the date portion but time as different for each.

But this consumes heavy UI / Backend operation on core data. Is there any optimal way to achieve this.

Example:

Chat Object in DB Chat ID | Message Text | Timestamp | Sender Id | Receiver Id

Data Example CHAT-001 | This is test 1 message | 22/10/2015:12:00:20 | abc.dev.abc.com | def.dev.abc.com CHAT-002 | This is test 2 message | 22/10/2015:13:00:20 | abc.dev.abc.com | def.dev.abc.com CHAT-003 | This is test 3 message | 22/10/2015:13:10:20 | def.dev.abc.com | abc.dev.abc.com CHAT-004 | This is test 4 message | 22/10/2015:14:10:20 | def.dev.abc.com | abc.dev.abc.com CHAT-005 | This is test 5 message | 23/10/2015:13:00:20 | abc.dev.abc.com | def.dev.abc.com CHAT-006 | This is test 6 message | 23/10/2015:13:05:20 | abc.dev.abc.com | def.dev.abc.com CHAT-007 | This is test 7 message | 24/10/2015:13:10:20 | def.dev.abc.com | abc.dev.abc.com CHAT-008 | This is test 8 message | 24/10/2015:13:10:20 | def.dev.abc.com | abc.dev.abc.com

Output Expected

Section name : 22/10/2015 CHAT-001 | This is test 1 message | 22/10/2015:12:00:20 | abc.dev.abc.com | def.dev.abc.com CHAT-002 | This is test 2 message | 22/10/2015:13:00:20 | abc.dev.abc.com | def.dev.abc.com CHAT-003 | This is test 3 message | 22/10/2015:13:10:20 | def.dev.abc.com | abc.dev.abc.com CHAT-004 | This is test 4 message | 22/10/2015:14:10:20 | def.dev.abc.com | abc.dev.abc.com

Section name : 23/10/2015 CHAT-005 | This is test 5 message | 23/10/2015:13:00:20 | abc.dev.abc.com | def.dev.abc.com CHAT-006 | This is test 6 message | 23/10/2015:13:05:20 | abc.dev.abc.com | def.dev.abc.com

Section name : 24/10/2015 CHAT-007 | This is test 7 message | 24/10/2015:13:10:20 | def.dev.abc.com | abc.dev.abc.com CHAT-008 | This is test 8 message | 24/10/2015:13:10:20 | def.dev.abc.com | abc.dev.abc.com

Any quick help so I can use NSFetchResultsController and also achieve Load More option using performFetchLimit and batch size is really appreciated.


Solution

  • I fixed that and working like charm using the transient attribute, did bit of learning for Coredata transient usage... Thanks a ton for this advices.