2009-04-20 11 views
1

Ich habe ein seltsames Problem, wo ein benutzerdefiniertes Steuerelement, das ich für das iPhone gebaut hat, funktioniert einwandfrei im Debug-Modus, funktioniert aber nur teilweise im eingebauten Modus.Touch-Methoden funktionieren nicht mit Release Build

Die Hauptansicht des Wrappers ist eine Unterklasse von UIView und enthält eine Reihe von "Schaltflächen", die als Unteransichten hinzugefügt werden. Die benutzerdefinierte Schaltfläche Klasse erweitert UIImageView und überschreibt die Touch-Methoden mit folgenden Signaturen:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event 
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event 

Wenn Debug-Code erstellen, alle 4 dieser Funktionen zu den Zeiten aufgerufen werden Sie es erwarten würden, mit einem Release-Build, passiert nichts . Ich habe mich angemeldet, und ich bekomme keine Log-Nachrichten (andere Logging funktioniert).

Eine weitere interessante Sache, ich habe die BerührungenBegan/Moved/Ended-Methoden in der Wrapper View-Klasse überschrieben und sie funktionieren gut. Ich habe versucht, diese Methoden in der Wrapper-Klasse auskommentieren, um zu sehen, ob es eine Wirkung auf die Schaltflächen hatte, aber es nicht getan hat.

Ich habe auch versucht, die UIImageView Klasse zu ändern, um eine Unterklasse von UIButton zu sein, aber habe das gleiche Problem dort, einschließlich aller Ereignisse wie TouchUpInside. Sie arbeiten im Debug, aber nicht im Release.

Ich habe versucht, dieses Problem sowie allgemeine Ereignisbehandlung zu erforschen und sind leer ausgegangen. Irgendwelche Ideen, wohin man als nächstes schaut?

+0

Es ist ein bisschen schwer zu sagen von dieser Info. Erhalten Sie Warnungen, wenn Sie alle Ziele bereinigen und Ihren Release Build neu erstellen? Wird Ihre Version in einem anderen Ziel als dem Debug-Build erstellt? –

+0

Sauberer Build enthält keine Fehler oder Warnungen, alle Build-Einstellungen sind identisch, mit Ausnahme von Active Configuration, die auf Release statt auf Debug gesetzt ist. Dies ist reproduzierbar auf einem iPhone, iPod touch und Simulator. – Loktar

Antwort

3

Endlich habe ich das Problem herausgefunden - der Wrapper für die "Button" -Objekte hatte eine Höhe von 0. Im Debug-Modus erkannte die App, dass die Tasten berührt wurden, obwohl sie nicht innerhalb des Trefferbereichs von waren ihre Elternansicht (clipsToBounds wurde standardmäßig auf NEIN gesetzt, so dass die Schaltflächenelemente immer noch perfekt sichtbar waren), im Veröffentlichungsmodus nicht so sehr.

Hoffentlich kann dies helfen, einige Menschen die Kopf kratzen und Debugging-Zeit, die ich durchlaufen musste :) Ich habe auch dies auf einen Fehler bei Apple gepostet, so hoffentlich wird es eines Tages behoben werden.

Verwandte Themen