Ich verstehe, was der Fehler EXC_BAD_ACCESS
im Allgemeinen bedeutet, aber ich bin verwirrt darüber, was in meinem Fall passiert.
Ich habe eine benutzerdefinierte Klasse mit einer NSComparator
Eigenschaft sortWithThisComparator
. Wenn diese Eigenschaft vom Benutzer festgelegt wird, wenn ich ein Element in das Klasseneigenschaftsarray der Instanz items
einfüge, verwende ich den Komparator, um den Einfügeort zu bestimmen:
Alles funktioniert gut, wenn ich keinen Komparator einstelle, aber wenn ich den Komparator verwende, bekomme ich einen schlechten Zugriffsfehler:
%Vor% Ich erhalte einen schlechten Zugriffsthread in der zweiten Zeile des Komparators, der einfach einen der über den NSComparator übergebenen Parameter protokolliert. Aber die Klasseninstanzen, die ich an die insertItem
übergebe, sind woanders ohne dieses Problem zugänglich, daher weiß ich, dass sie ordnungsgemäß instanziiert wurden und ansonsten ordnungsgemäß übergeben werden, da ich sie ohne einen Vergleicher in die Eigenschaft items
einfügen kann. Was fehlt mir hier?
Weitere Details. Ich speichere den NSComparator als
%Vor%Tatsächlich kann ich nur einige Annahmen gemäß den oben erwähnten Codes treffen.
Für den ersten Block, ich denke, self.items ist ein veränderbares Array. Auch in der Funktion insertItem:
, sobald sortWithThisComparator
nicht nil ist, wird ein neues Objekt eingefügt, nachdem ein Sortierprozess einen Index erhalten hat.
Da Sie bei Threadproblemen einen schlechten Zugriff erhalten, haben Sie in Ihren Codes nicht auf das Threading geachtet.
Hier sind einige Vorschläge:
Beispiel:
%Vor%Sehen wir uns diese Zeile an:
%Vor% Meiner Meinung nach würde ich zuerst eine Array-Kopie machen und Optionen mit NSBinarySearchingInsertionIndex
:
NSMakeRange(0, self.items.count)
.
Vermutlich überarbeiten Sie auch den Zustand kleines Bit in Funktion
insertItem:
, Das sind einige Gedanken, die ich bei dieser Bewegung habe. Ich werde mehr hinzufügen, sobald ich Ideen für andere Möglichkeiten bekomme.
Tags und Links objective-c nsarray sorting exc-bad-access