• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Was gibt es Schöneres als den Mai draußen in der Natur mit allen Sinnen zu genießen? Lasst uns teilhaben an Euren Erlebnissen und macht mit beim Thema des Monats Da blüht uns was! ---> Klick

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
 

Nighthawk

Linsenhofener Sämling
Registriert
16.12.06
Beiträge
2.558
So:

Code:
[view setNeedsDisplay:YES];


Doku hilft. ;)
 

zottel

James Grieve
Registriert
11.07.08
Beiträge
133
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