• Das kreative Thema des Monats Oktober wird vor allem diejenigen unter Euch besonders ansprechen, denen Do-it-yourself quasi im Blut liegt. Zeigt uns Eure Improvisationskünste oder fotografiert, was andere Leute sich so im Alltag zusammengestrickt haben. --> Zum Mitmachen bitte hier klicken

setNeedsDisplay hat keine Auswirkung

zottel

James Grieve
Registriert
11.07.08
Beiträge
133
Hallo,

ich mache gerade einige Vortests für eine Applikation, die ich schreiben möchte.

Ich habe eine View, die irgendwann mal String-Arrays ausgeben soll, die vom zugehörigen Controller gesetzt werden. Momentan habe ich nur einen einzigen String.

drawRect: enthält die Anweisungen, um den String auszugeben. Ist der String noch nicht gesetzt, wird ein Dummy-String ausgegeben. Die Ausgabe des Dummy-Strings beim Starten der Applikation funktioniert.

Nun setze vom Controller aus den String auf einen neuen Wert und rufe dann [view setNeedsDisplay]; auf. Das führt aber seltsamerweise nicht dazu, dass drawRect: aufgerufen wird. Ich habe einen Breakpoint in drawRect:, der wird am Anfang beim ersten Darstellen des Fensters erreicht, und dann nie wieder, obwohl ich setNeedsDisplay an die View schicke. Was mache ich falsch?

Viele Grüße,

Christian
 
So:

Code:
[view setNeedsDisplay:YES];


Doku hilft. ;)
 
Nein, setNeedsDisplay war schon richtig – es ging um UIView, nicht NSView; hätte ich dazusagen sollen, sorry.

Das Problem war, dass ich im interface view neu definiert habe, damit es meine View-Klasse statt UIView hat. Damit habe ich dann letztlich die falsche (= eine nicht vorhandene) View angesprochen, auch wenn ich nicht ganz verstehe warum.

Lasse ich view aber wie es ist, bekomme ich ein Warning, wenn ich Methoden aufrufen will, die nicht in UIView definiert sind, sondern nur in meiner eigenen Klasse. Ich verbinde meine View-Klasse nicht direkt in eigenem Code, sondern im Interface-Builder. Wie kriege ich die Warnings wieder los?

Genauere Beschreibung: Es gibt die Klasse testViewController, dazu testViewController.xib. In testViewController.xib ist File's Owner von der Klasse testViewController, das Outlet view von File's Owner ist mit der View im xib verbunden, die ihrerseits von der Klasse testView (= mein erweiterter Erbe von UIView) ist.

Funktioniert grundsätzlich alles, jetzt, aber ich bekomme halt das Warning „'UIView' may not respond to -setDisplayString“.

Und gleich noch die nächste Frage: Warum funktioniert [self.view setNeedsDisplay];, [view setNeedsDisplay]; aber nicht?

Danke,

Christian