EXC_BAD_ACCESS verwendet ARC nur während des Tests

7

Ich habe ein Problem, bei dem ich schlechte Zugriffsausnahmen bekomme, aber nur, wenn ich einen Test-Build ausführe (das Aufrufen der gleichen Methoden in einem Debug-Build führt nicht zum Problem). Das Projekt hat ARC aktiviert und ich führe dies auf dem iPad 5.1 Simulator mit Xcode 4.3:

Hier kommt das Problem auf:

%Vor%

An dem Punkt, an dem die addObserver: -Methode aufgerufen wird, scheint es so, als ob keines der beteiligten Objekte freigegeben worden sein sollte. Was könnte die Ausnahme verursachen?

BEARBEITEN:

Entschuldigung, wenn es nicht klar war, aber der obige Code wird als Teil eines Testfalls ausgeführt (unter Verwendung der Standard Xcode OCUnit). Auch für den Fall, dass hier etwas klargestellt wird, ist der relevante Code aus der Player-Klasse (es gibt andere Ivars und Methoden, aber sie haben keine Verbindung zu der Eigenschaft oder zu testenden Methoden):

%Vor%     
Mattia 20.04.2012, 13:02
quelle

2 Antworten

21

Wenn Ihre Klasse tatsächlich Schlüsselwert-konform ist, stellen Sie sicher, dass die Implementierung für die Klasse, die das Problem aufweist, nicht in Ihrem Testprodukt enthalten ist. Dies bedeutet, dass im Bereich "Zielmitgliedschaft" des Identitätsinspektors für Ihre .m-Datei nur Ihre App überprüft werden sollte (nicht YourAppTests).

Ich hatte das gleiche Problem in Xcode 4.3.1, als eine Implementierung in beiden Produkten enthalten war und ich sowohl in der Produktion als auch im Testcode Beobachter registrierte. Die folgenden Protokolle gaben mir einen Tipp:

  

Die Klasse YourClass ist sowohl unter / Benutzer / yourUser / Bibliothek / Anwendungsunterstützung / iPhone Simulator / 5.1 / Anwendungen // YourApp.app / YourApp und / Benutzer / yourUser / Bibliothek / Entwickler / Xcode / DerivedData / YourApp- / Build implementiert /Products/Debug-iphonsimulator/YourAppTests.octest/IhreAppTests. Einer der beiden wird verwendet. Welches ist undefiniert.

    
Mark Schabacker 26.04.2012, 16:47
quelle
0

Gemäß der Key-Value Observing Programmierhandbuch , ist Ihr Player key-value-konform? Sie möchten sicherstellen, dass Sie Gewährleistung der KVC-Konformität . Ich nehme auch an, dass Sie auch Ihre observeValueForKeyPath:ofObject:change:context: implementiert haben? Wenn du denkst, dass du all das getan hast und es immer noch nicht funktioniert, kannst du vielleicht deinen Code teilen.

Auch, kleine Sache, aber ich nehme an, dies ist ein Code-Snippet, um das Problem hervorzuheben. Ich erwähne es nur, weil ARC Ihr p-Objekt am Ende Ihrer testChangeFoodNotification freigibt und ich hätte gedacht, dass Sie zuerst Ihren Beobachter entfernen möchten.

    
Rob 20.04.2012 13:31
quelle