Wx_chat_yj
Ich arbeite schon eine Weile in IM und diesmal habe ich einige Fallstricke aufgezeichnet, die ich zuvor begegnet bin. Ich werde den Chat -Teil später teilen. Ich hoffe, es wird für alle hilfreich sein. Unter den Projekten, die ich zuvor online angesehen habe, sprach ich selten über die Begegnung mit Fallstricken während des Entwicklungsprozesses. Wenn Sie zum ersten Mal einen Chat schreiben, können Sie auf weitere Probleme stoßen. Hier werde ich hauptsächlich über die Fallstricke sprechen, denen ich begegnet bin. Jeder ist herzlich eingeladen, Fotos zu machen. Bitte geben Sie mir verschiedene Meinungen, danke. Jeder macht gemeinsam Fortschritte!
Wenn es für Sie nützlich ist, denken Sie an die Sterne!
Grundlegende Funktionen umfassen
Rückzug, Löschen, Kopieren von Nachrichten
Stimme, Text, Bilder
Anzahl ungelesener Menschen
Andere Nachrichtenstile, die im Projekt angepasst wurden
In den tatsächlichen Projekten gibt es Cloud -Datenträger, Video -Wiedergabe und Kreis von Freunden ...
1. Beginnen Sie mit dem Framework
Projektbetriebscreenshot


Grundprojektstruktur


2. Die Datenbank verwendet einen WeChat Open Source WCDB, ohne eine SQL -Anweisung zu schreiben.
3. Ich habe einige der folgenden Fallstricke begegnet
1. Schnittstellenverzögerung
- Bei der Verwendung des Schnittstellenlayouts wird die automatische Höhenberechnung der dritten Anbieter der Zelle verwendet. Da es viele Projekt -Chat -Stile gibt, werden bei Verwendung des XIB -Layouts nur linke und rechte Stile angelegt, und der Stil wird durch Verstecken und Anzeigen gesteuert. Aufgrund der Entwicklung verwendete ich nicht zu viele Daten, um sie zu testen, was dazu führte, dass ich sehr stotterte, wenn zu viele Daten vorhanden waren. Der Chef sprach über Kakaka, was noch stotterer war als die alte Kuh, die ein kaputtes Auto zog. Diese Art von Stottern wurde beim Schieben der Seite deutlich zu spüren.
Nachdem Sie die Ursache des Problems gefunden haben, die folgende Lösung:
Berechnen Sie zunächst die Höhe manuell und lösen Sie die Konflikte im XIB -Layout. Die Glätte der Gleitseite ist akzeptabel. Natürlich ist es möglicherweise besser, ein besseres reibungsloses Rahmenlayout zu erreichen.
Versuchen Sie gleichzeitig, wenn XIB XIB Layout verwendet, so wenige Ebenen wie möglich. Weitere Ebenen beeinflussen die Sprachausstattung.
2. Datenverzögerung
- Zu Beginn haben wir das aktuelle Chat -Nachrichtenmodell durch die ungelesenen Nummern der Serverquittung ersetzt, da wir an der Verarbeitung der Anzahl der ungelesenen Personen beteiligt waren. Wenn die Anzahl der Chatter ein bestimmtes Niveau erreicht, lesen mehr Menschen die Nachrichten. Die Quittungen sind zu diesem Zeitpunkt häufig. Wenn die Quittung zurückkommt, um bestimmte Daten zu aktualisieren, kommt die Schnittstelle erneut. Während dieses Prozesses werden ungelesen verarbeitet. Es gibt einige Probleme mit dem Kunden. Senden Sie beim Schieben der Seite die aktuell ungelesene Nachricht an den Server. Der Server gibt es erfolgreich zurück, um anzuzeigen, dass er gelesen wurde. Servermeldungen werden in die Warteschlange gestellt und häufig auf den Server empfangen. Server werden häufig an Clients weitergegeben. Dadurch wird die Aktualisierung der Seiten zu häufig sein. Es bleibt auf unserer Kundenseite stecken. (Das Problem beim Austausch von Nachrichten zu diesem Zeitpunkt besteht darin, die Daten zu finden, die während der aktuellen Meldung durchquert werden sollen.)
Nachdem er die Grundursache des Problems gefunden hatte, wurden die folgenden Methoden verwendet, um sie zu lösen:
- Speichern Sie die Nachrichten, die Sie separat senden, und ersetzen Sie die ungehinderte Nummer nur, um die derzeit gesendeten zu ersetzen.
- Und bei der Bestimmung der Höhe (High -ForrowatIndexPath) in jedes Modell eine aktuelle Meldungsposition. Beim Ersetzen von Nachrichten können Sie die Nachricht schnell lesen und finden, die nach Bedarf ersetzt werden soll. Schreiben Sie niemals hier den Zellströkatindexpath, um den Ort zu bestimmen. Andernfalls wäre es wieder ein Betrug.
Die fließende Methode erfüllt im Grunde die Anforderungen. Suchen Sie nur die Daten, die aus den von Ihnen gesendeten Nachrichten ersetzt werden sollen, und der Ort wurde ermittelt. Ersetzen Sie es einfach direkt.
A.
- Am Anfang haben wir FMDB verwendet.
- Beim Speichern von Daten werden die Modelldaten direkt gespeichert, und es wird festgestellt, dass es bei vielen Daten erneut stottert. (Wir haben es nicht gut benutzt) Ich fühle mich beim Speichern schneller, aber als ich es las, bin ich stecken, wenn ich zu viele Daten bekomme. Hier gibt es noch einen, der das Bild in Daten übertragen und es speichert. Wenn Sie die Seite zum ersten Mal eingeben, müssen Sie, wenn Sie Dutzende von Bildern in einer Zeile haben, eine Weile warten, wenn Sie von außen einklicken. Der Hauptfaden steckt fest.
Wir werden das Problem lösen, wenn wir es finden:
- Wir verwenden WeChat Open Source WCDB für Datenbank, was in allen Aspekten angenehmer ist. Keine Notwendigkeit, SQL -Anweisungen zu danken.
Wenn Sie das Modell speichern, erhalten Sie das Modell auch ohne Verzögerung.
- Für die Bildverarbeitung verwenden wir das Bild, um die Sandbox zu speichern, und die Schlüsselfelder in der Bildadresse und der Nachricht als Schlüssel zum Speichern der Sandbox verwenden. Zu diesem Zeitpunkt muss die Datenbank nur die Adresse speichern. Basierend auf dem Schlüssel wie dieser Adresse finden Sie das Bild. Nachdem Dutzende von Bildern getestet wurden, fühlte ich es nicht. Hier werden wir nur die Bilder von uns gepostet. Das Bild SDWebimageView der anderen Partei ist zwischengespeichert. Der Zweck von zwischengespeichertem Bild besteht darin, es zur Verarbeitung zur Verwendung zu senden. Hier verwenden wir NSCache -Cache, um den Code im Code zu verarbeiten ...
4. Wenn die Seite voller Ausdrücke ist, steckt sie fest
- Nach der obigen Behandlung ist die Sprachkenntnisse bereits akzeptabel.
Aber eines Tages postete ein Kollege die gesamte Seite, die voller Ausdrücke auf der Systemtastatur war, und ich blieb wieder stecken. Und andere Kollegen stellten auch bekannt, dass es Kakaka war, den jeder verstehen kann (und außerdem gibt es in unserem Unternehmen eine Testsituation, die davon ausgeht, dass jeder jeden Tag von Montag bis Freitag und einer halben Stunde pro Wochenendabend eine halbe Stunde testet. Der Chef und alle Mitarbeiter sind da). Weil wir ohne Verarbeitung gewöhnlich uilable verwenden.
Dies erinnerte ich mich an yylable, asynchrone Rendering, was die Schnittstelle glatter und reibungsloser macht. Nach dem Ersatz nahm die Glätte stark zu.
5. Ernsthaft verpasste Nachrichten
- Nachdem die erste Version des Chats herausgekommen war, haben es mehrere Personen zusammen getestet. Das Leck war sehr ernst. Nach der Untersuchung traten wichtige Probleme auf, als wir die Nachrichten aufbewahrten.
- Aktuelle Lösung:
- Gemäß der von der Steckdose gedrängten Nachricht wird sie gespeichert, solange der Sockel angeschlossen ist.
- Nachdem sie die Nachricht erhalten hat, wird sie an den Server zurückgegeben (der Server erhält derzeit die größte Nachricht, wenn das Intervall sehr kurz ist). Wenn keine Quittung vorliegt, wird der Server beim Senden von Nachrichten mehrere Nachrichten verschoben, und Sie müssen die schweren Lasten selbst anordnen.
- Wenn das Netzwerk den Socket und den Verbindungsverbinden nicht anschließt, wird auch Nachrichten gezogen, wodurch Daten effektiv gewährleistet werden
6. Sprechen Sie über die Verzögerung mehrerer Avatare
Hier wollen wir Avatare von 9 Menschen wie Dingtalk und Wechat machen. Und wenn es keinen Avatar gibt, sollte das letzte Wort des Namens auf der Position des Avatars angezeigt werden.
Hier habe ich 9 Schaltflächen verwendet, die für Bilder und Text verwendet werden können. Ich dachte, es würde stecken bleiben, wenn es viele Daten gab, als ich sie schrieb, aber infolgedessen berechnete ich die Rahmenanpassungsposition basierend auf der tatsächlichen Anzahl von Avataren und versteckte die nicht benötigten Tasten. Nachdem das Ergebnis geschrieben wurde. Der Effekt ist ziemlich gut. Fließende kann die Anforderungen erfüllen. Sagen Sie einfach, dieser Avatar wurde von drei Personen geschrieben. Hey-hey.
7. Der Inhalt wird noch verbessert ...