Wx_chat_yj
Je travaille dans IM depuis un certain temps, et cette fois j'ai enregistré quelques pièges que j'ai rencontrés auparavant. Je partagerai la partie de chat plus tard. J'espère que ce sera utile à tout le monde. Parmi les projets que j'ai regardés en ligne auparavant, j'ai rarement parlé de rencontrer des pièges pendant le processus de développement. Si vous écrivez un chat pour la première fois, vous pouvez rencontrer plus de problèmes. Ici, je parlerai principalement des pièges que j'ai rencontrés. Tout le monde est invité à prendre des photos. S'il vous plaît, donnez-moi des opinions différentes, merci. Tout le monde progresse ensemble!
Si cela vous est utile, rappelez-vous les étoiles!
Les fonctions de base incluent
Rétraction, suppression, copie des messages
Voix, texte, images
Nombre de personnes non lues
Autres styles de messages personnalisés dans le projet
Dans les projets réels, il y a un disque cloud, une lecture vidéo et un cercle d'amis ...
1. Commencez par le cadre


2. La base de données utilise un WCDB open source WeChat sans écrire une instruction SQL.
3. J'ai rencontré certains des pièges suivants
1. LAG INTERFACE
- Lorsque vous utilisez la disposition de l'interface, UableTView + ... Le calcul de hauteur automatique tiers de la Cell est utilisé. Parce qu'il existe de nombreux styles de chat de projet, seuls les styles gauche et droite sont disposés lors de l'utilisation de la disposition XIB, et le style est contrôlé en se cachant et en affichant. En raison du développement, je n'ai pas utilisé trop de données pour tester, ce qui m'a fait être très bégayé lorsqu'il y avait trop de données. Le patron parlait de Kakaka, qui était encore plus bégayé que la vieille vache tirant une voiture cassée. Ce type de bégaiement a été clairement ressenti lors de la glissement de la page.
Après avoir trouvé la cause du problème, la solution suivante:
Tout d'abord, calculez manuellement la hauteur et résolvez les conflits dans la disposition XIB. La douceur de la page coulissante est acceptable. Bien sûr, il peut être préférable d'obtenir une meilleure disposition de cadre lisse.
En même temps, lorsque XIB utilise la disposition XIB, essayez d'avoir le moins de niveaux possible. Plus de niveaux affecteront la maîtrise.
2. Data Lag
- Au début, parce que nous avons été impliqués dans le traitement du nombre de personnes non lues par message, nous avons remplacé le modèle de message de chat actuel via les numéros non lus de la réception du serveur. Lorsque le nombre de batteurs atteint un certain niveau, plus de gens liront les nouvelles. Les reçus sont fréquents pour le moment. Lorsque le reçu revient pour actualiser une certaine données, l'interface revenez. Au cours de ce processus, les non lus sont traités. Il y a quelques problèmes avec le client. Lorsque vous glissez la page, envoyez le message actuellement non lu au serveur. Le serveur le renvoie avec succès pour indiquer qu'il a été lu. Les messages du serveur sont en file d'attente et fréquemment reçus sur le serveur. Les serveurs sont fréquemment poussés aux clients. Cela rend la rafraîchissement de la page trop fréquente. Il est coincé du côté client. (Le problème par le remplacement des messages pour le moment est de trouver les données à remplacer pendant la traversée de messages actuelle)
Après avoir trouvé la cause profonde du problème, les méthodes suivantes ont été utilisées pour la résoudre:
- Enregistrez les messages que vous envoyez séparément et remplacez que le numéro non conduit doit seulement remplacer celui actuellement envoyé.
- Et lors de la détermination de la hauteur (HeightForrowatindexpath) met une position de message actuelle dans chaque modèle. Lorsque vous remplacez les messages, vous pouvez rapidement lire et trouver le message à remplacer au besoin. N'écrivez jamais ici CellForrowatindexpath pour déterminer l'emplacement. Sinon, ce serait à nouveau une arnaque.
La maîtrise de la méthode ci-dessus répond essentiellement aux exigences. Trouvez uniquement les données à remplacer les messages que vous avez envoyés et l'emplacement a été déterminé. Remplacez-le simplement directement.
3. Message de lecture de la base de données coincée
- Au début, nous avons utilisé FMDB.
- Lors du stockage des données, les données du modèle sont stockées directement et on constate que lorsqu'il y a beaucoup de données, il bégaie à nouveau. (Nous ne l'avons pas bien utilisé) Je me sens plus vite lors de l'enregistrement, mais quand je l'ai lu, je suis coincé lorsque j'obtiens trop de données. Il y en a un autre ici, qui est de transférer l'image sur des données et de les enregistrer. Le fil principal est coincé.
Nous résoudrons le problème lorsque nous le trouverons:
- Nous utilisons WCDB Open Source WeChat pour la base de données, ce qui est plus agréable dans tous les aspects. Pas besoin de remercier les instructions SQL.
Si vous enregistrez le modèle, vous obtiendrez également le modèle, sans aucun décalage.
- Pour le traitement d'image, nous utilisons l'image sur les données pour stocker le bac à sable et utilisons les champs clés de l'adresse et du message de l'image comme des touches pour stocker le bac à sable. À l'heure actuelle, la base de données n'a besoin que de stocker l'adresse. Sur la base de la clé comme l'adresse, trouvez l'image. Après des dizaines de photos testées, je ne l'ai pas ressentie. Ici, nous ne mettons en cache que les photos que nous avons publiées. L'image de l'autre partie SdwebimageView est mise en cache. Le but de votre propre image est en cache de l'envoyer à utiliser pour le traitement. Ici, nous utilisons le cache NSCCache pour traiter le code dans le code ...
4. Lorsque la page est pleine d'expressions, elle est bloquée
- Après le traitement ci-dessus, la maîtrise est déjà acceptable.
Mais un jour, un collègue a publié toute la page, qui était pleine d'expressions sur le clavier du système, et je suis allé à nouveau coincé. Et d'autres collègues ont également affiché que c'était Kakaka, que tout le monde peut comprendre (et en outre, il y a une situation de test dans notre entreprise, à savoir que tout le monde teste une demi-heure de lundi au vendredi et une demi-heure chaque week-end. Le patron et tous les employés sont là). Parce que nous utilisons Uilable ordinaire sans traitement.
C'est ce dont je me souvenais d'un rendu asynchrone yylable, rendant l'interface plus lisse et plus lisse. Après le remplacement, la douceur a beaucoup augmenté.
5. Nouvelles manquées
- Après la sortie de la première version du chat, plusieurs personnes l'ont testée ensemble. La fuite s'est avérée très grave. Après enquête, des problèmes importants sont survenus lorsque nous stockions les nouvelles.
- Solution actuelle:
- Selon le message poussé par la prise, tant que la prise est connectée, elle sera enregistrée.
- Et après avoir reçu le message, il est renvoyé au serveur (le serveur reçoit le plus grand message au moment où l'intervalle est très court). S'il n'y a pas de reçu, le serveur pousse plusieurs messages lors de l'envoi de messages et vous devez organiser les charges lourdes par vous-même.
- De plus, lorsque le réseau déconnecte la prise et se reconnecte, il tirera également des messages, garantira efficacement les données
6. Parlez du décalage de plusieurs avatars
Ici, nous voulons faire des avatars de 9 personnes comme Dingtalk et WeChat. Et quand il n'y a pas d'avatar, le dernier mot du nom doit être affiché sur l'emplacement de l'avatar.
Ici, j'ai utilisé 9 boutons, qui peuvent être utilisés pour les images et le texte. Je pensais que ce serait coincé quand il y avait beaucoup de données quand je l'ai écrit, mais en conséquence, j'ai calculé la position de réglage du cadre en fonction du nombre réel d'avatars, et caché les boutons qui n'étaient pas nécessaires. Après l'écriture du résultat. L'effet est assez bon. La maîtrise peut répondre aux exigences. Dites simplement cet avatar a été écrit par trois personnes. Hey-hey.
7. Le contenu est toujours en cours de l'amélioration ...