Fehler: Objekt wurde gelöscht oder ungültig gemacht. (Reich)

8

Manchmal (selten aber tritt auf) bekam ich den Fehler Object has been deleted or invalidated. , wenn ich versuchte, mein Modellobjekt mit einer Eigenschaft oder innerhalb von AFnetworking Block zu modifizieren. Kann mir jemand helfen zu finden, was ich falsch mache?

Fehler - Fall 1:

Code:

%Vor%

Fehler - Fall 2:

Eigenschaft:

%Vor%

Code:

%Vor%

UIAlertView-Delegierter:

%Vor%

Danke.

    
Luciano Nascimento 16.10.2015, 20:46
quelle

1 Antwort

7
___ tag123objectivec ___ Dieses Tag sollte nur bei Fragen verwendet werden, die sich auf Objective-C-Funktionen beziehen oder von Code in der Sprache abhängen. Die Tags [Kakao] und [Kakao-Touch] sollten verwendet werden, um nach Frameworks oder Klassen von Apple zu fragen. Verwenden Sie die verwandten Tags [ios], [macos], [apple-watch] und [tvos] für Probleme, die für diese Plattformen spezifisch sind. ___ tag123realm ___ Die Realm Platform ist eine Datensynchronisationsplattform für mobile Anwendungen. Es enthält die Realm-Datenbank, den Realm-Objektserver und Realm Studio. Sie können Tausende von Codezeilen und Arbeitswochen sparen und fantastische neue Benutzererfahrungen erstellen. ___ qstntxt ___

Manchmal (selten aber tritt auf) bekam ich den Fehler UIAlertView , wenn ich versuchte, mein Modellobjekt mit einer Eigenschaft oder innerhalb von AFnetworking Block zu modifizieren. Kann mir jemand helfen zu finden, was ich falsch mache?

Fehler - Fall 1:

Code:

%Vor%

Fehler - Fall 2:

Eigenschaft:

%Vor%

Code:

%Vor%

UIAlertView-Delegierter:

%Vor%

Danke.

    
___ qstnhdr ___ Fehler: Objekt wurde gelöscht oder ungültig gemacht. (Reich) ___ answer3180442 ___

Wie in Beispiel 1 wird die Netzwerkanforderung in einer anderen Operationswarteschlange asynchron ausgeführt und ruft den Hauptthread erneut auf. Es ist sehr wahrscheinlich, dass Sie über einen Code verfügen, der in der Zwischenzeit von einer Benutzeraktion ausgelöst werden kann und das Objekt löscht gleichzeitig. Die Modellobjekt-Referenz, die Sie halten, wird automatisch aktualisiert und spiegelt das Löschen wider. Da ein gelöschtes Objekt nicht geändert werden kann, kommt es zu dem Fehler.

Auch Beispiel 2 beinhaltet Nebenläufigkeit. Ihr Code ruft zuerst das Modellobjekt ab und zeigt dann die Alarmansicht an. Während %code% angezeigt wird, wird der Haupt-Thread nicht blockiert. Theoretisch könnte gleichzeitig ein Netzwerkvorgang, der zuvor in die Warteschlange gestellt wurde, enden, der Abschlussblock könnte ausgelöst werden, ein Löschen des Modellobjekts tritt auf. Der Benutzer bestätigt die Änderungen. Ihre Implementierung des Delegaten wird aufgerufen, erwartet jedoch, dass das zuvor abgerufene Objekt noch vorhanden ist.

Eine Möglichkeit zur Vermeidung von Abstürzen besteht darin, nur einen Primärschlüssel anstelle eines vollständigen Modellobjektverweises zu speichern, der die letzten Änderungen aktualisiert und wiedergibt. Der Primärschlüssel bleibt konstant und sollte immer in der Lage sein, Ihr Objekt zu identifizieren. Sie können den Primärschlüssel später verwenden, um das Objekt direkt in Ihrer Schreibtransaktion abzurufen.

Beachten Sie, dass es in jedem Fall an Ihnen liegt zu definieren, wie sich Ihre App verhält, wenn Ihre Daten gleichzeitig geändert wurden. Sie können versuchen, das Objekt neu zu erstellen, indem Sie mehr Daten in der Kopie behalten oder das Ereignis ignorieren und das Löschen gewinnen lassen oder sicherstellen, dass keine widersprüchlichen Änderungen auftreten, indem Sie die Benutzeroberfläche angemessen einschränken. Sie müssen eine Konfliktlösungsstrategie entwickeln.

    
___
marius 16.10.2015, 22:24
quelle

Tags und Links