1

Ich verwende ein SharedObject, um eine einfache Chat-App zu erstellen. Das SharedObject wurde ordnungsgemäß erstellt und meine Anwendung konnte das Synchronisierungsereignis erhalten, wenn andere Clients die Daten auf dem SO aktualisieren. Das Problem tritt jedoch auf, wenn meine App versucht, die Daten auf der SO zu speichern, um andere Clients zu signalisieren. Ich habe festgestellt, dass die Daten geändert wurden mit dem folgenden Code:SharedObject: kann Ereignis von anderen Clients empfangen, löst jedoch nach dem Speichern von Daten kein Ereignis aus

trace("before:"+so.data.chatMessage); 
so.data.chatMessage = msg.text; 
trace("after:"+so.data.chatMessage); 

Es wird gesagt „vor: abc“ und „nach: def“. Leider haben keine Clients das Synchronisierungsereignis erhalten, nachdem die Daten auf der SO geändert wurden, einschließlich des Clients, der die Daten selbst geändert hat. Das bedeutet also, dass dieser Client die Nachricht eines anderen Clients empfangen kann, aber sich selbst keine Nachricht erhält.

Jeder hat solche Probleme schon einmal gesehen? Danke, Jack

+0

Haben Sie 'so.flush()'? – Vesper

+0

Das wusste ich nicht. Der Aufruf von so.flush führte zu "Fehler: Fehler # 2130: SharedObject kann nicht gelöscht werden." Es wurde jedoch kein interner Fehler ausgegeben. So scheint es das Problem war der Flush konnte nicht erfolgreich sein ... Eine Idee, wie könnte passieren? Vielen Dank. –

+0

@Vesper, BTW, habe ich die SO mit GetRemote erstellt, anstelle von getLoal, muss ich noch so.flush() aufrufen? Ich habe die Dokumentation durchgelesen und es war mir nicht sehr klar, ob der Aufruf flush() sowohl für getLocal() als auch für getRemote() SOs galt. –

Antwort

2

Sie haben flush() zu nennen:

If you don't use this method, Flash Player writes the shared object to a file when the shared object session ends — that is, when the SWF file is closed, when the shared object is garbage-collected because it no longer has any references to it, or when you call SharedObject.clear() or SharedObject.close() .

oder

Verwendung setProperty() die Eigenschaft zu ändern:

Updates the value of a property in a shared object and indicates to the server that the value of the property has changed.

Wie Sie nur eine Eigenschaft des data Objekts ändern Es wird nicht gemeldet, dass sich dieser Wert geändert hat.

Calling so.flush() resulted in "Error: Error #2130: Unable to flush SharedObject." It did not print an internal error, though. So it seems the problem was the flush couldn't be successful... Any idea how could happen?

einen Blick auf diese andere Frage nehmen:

Error #2130 Unable to flush sharedObject

+0

Ist das immer noch wahr, wenn ich die SO mit getRemote() erstellt habe? Ich habe flush() aufgerufen und habe "Error: Error # 2130: SharedObject kann nicht gelöscht werden". –

+0

@JackX. Ich habe meine Antwort bearbeitet, um einen weiteren Vorschlag hinzuzufügen. – null

+0

Der setProperty() Ansatz funktioniert! Ich habe ein paar Stunden damit verbracht und du hast mich gerettet. Danke, Mann! –

Verwandte Themen