1

Je crée une application de chat comme l'application où je dois trier discuter des messages et les sectionner en fonction de NSDate (JJ/MM/AA).NSFetchResultController pour trier les éléments de discussion dans les sections date (jj/mm/aaaa) et chaque section triée à nouveau par jj/mm/aa hh: mm: ss

Chaque nom de section distinct (JJ/MM/AA) comportera des éléments triés à nouveau sur l'horodatage contenant cette date.

Comment puis-je obtenir cela dans NSFetchResultsController. J'ai réussi à réaliser cela en utilisant Distinct Query pour obtenir toutes les dates des objets de chat qui correspondent au JJ/MM/AAAA et trouver les noms des sections.

Puis de nouveau faire une requête à DB pour trouver toutes les conversations correspondant à l'horodatage des objets de discussion pour la partie date mais l'heure étant différente pour chacune. Mais cela consomme une lourde opération UI/Backend sur les données de base. Y a-t-il un moyen optimal d'y parvenir?

Exemple:

chat objet dans DB ID Chat | Texte du message | Horodatage | Identifiant de l'expéditeur | Récepteur Id

données Exemple CHAT-001 | Ceci est le message test 1 | 22 octobre 2015: 12: 00: 20 | abc.dev.abc.com | def.dev.abc.com CHAT-002 | Ceci est un message de test 2 | 22 octobre 2015: 13: 00: 20 | abc.dev.abc.com | def.dev.abc.com CHAT-003 | Ceci est le message de test 3 | 22 octobre 2015: 13: 10: 20 | def.dev.abc.com | abc.dev.abc.com CHAT-004 | Ceci est le message test 4 | 22/10/2015: 14: 10: 20 | def.dev.abc.com | abc.dev.abc.com CHAT-005 | Ceci est le message test 5 | 23 octobre 2015: 13: 00: 20 | abc.dev.abc.com | def.dev.abc.com CHAT-006 | Ceci est le message test 6 | 23/10/2015: 13: 05: 20 | abc.dev.abc.com | def.dev.abc.com CHAT-007 | Ceci est le message de test 7 | 24/10/2015: 13: 10: 20 | def.dev.abc.com | abc.dev.abc.com CHAT-008 | Ceci est un message de test 8 | 24/10/2015: 13: 10: 20 | def.dev.abc.com | abc.dev.abc.com

Sortie prévue

Nom de la section: 22/10/2015CHAT-001 | Ceci est le message test 1 | 22/10/2015: 12: 00: 20 | abc.dev.abc.com | def.dev.abc.comCHAT-002 | Ceci est le message test 2 | 22 octobre 2015: 13: 00: 20 | abc.dev.abc.com | def.dev.abc.comCHAT-003 | Ceci est le message de test 3 | 22/10/2015: 13: 10: 20 | def.dev.abc.com | abc.dev.abc.comCHAT-004 | Ceci est le message test 4 | 22/10/2015: 14: 10: 20 | def.dev.abc.com | abc.dev.abc.com

Nom de la section: 23/10/2015 CHAT-005 | Ceci est le message test 5 | 23 octobre 2015: 13: 00: 20 | abc.dev.abc.com | def.dev.abc.com CHAT-006 | Ceci est le message test 6 | 23/10/2015: 13: 05: 20 | abc.dev.abc.com | def.dev.abc.com

Nom de la section: 24/10/2015 CHAT-007 | Ceci est le message de test 7 | 24/10/2015: 13: 10: 20 | def.dev.abc.com | abc.dev.abc.com CHAT-008 | Ceci est un message de test 8 | 24/10/2015: 13: 10: 20 | def.dev.abc.com | abc.dev.abc.com

Toute aide rapide donc je peux utiliser NSFetchResultsController et obtenir également l'option de charge en utilisant plus performFetchLimit et la taille des lots est vraiment apprécié.

+0

Si vous utilisez (ou souhaitez traduire) Objective-C, cet exemple [Apple] (https://developer.apple.com/library/ios/samplecode/DateSectionTitles/Listings/ReadMe_txt.html) donne une bonne idée. idée quant à la façon de s'y prendre. – pbasdf

+0

Merci PBASDF mais je ne suis toujours pas capable de comprendre cela. Est-il possible de passer un exemple d'extrait pour l'exigence ci-dessus. serait vraiment utile à comprendre. Pour l'instant ce que j'ai essayé est de créer une autre colonne et remplir la même valeur que la colonne timestamp mais sans temps. Passez ensuite cette colonne en tant que sectionkeypathname pour extraire les résultats du contrôleur à la section, puis utilisez la colonne timestamp comme descripteur de tri. Mais est-ce une solution optimale? –

+0

Si votre nouvelle colonne est transitoire, alors votre solution est (essentiellement) la méthode utilisée dans l'exemple Apple que j'ai référencé. Si vous utilisez un nouvel attribut persistant, alors votre solution est légèrement différente, et vient avec le surcoût (qui pourrait être négligeable) de définir le nouvel attribut si/quand l'horodatage change. Mais c'est autrement la même solution. Est-ce que ça marche? Si non, postez ce que vous avez jusqu'ici ... – pbasdf

Répondre

0

J'ai corrigé cela et travaillé comme charme en utilisant l'attribut transitoire, j'ai fait un peu d'apprentissage pour l'utilisation transitoire de Coredata ... Merci beaucoup pour ces conseils.