• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Viele hassen ihn, manche schwören auf ihn, wir aber möchten unbedingt sehen, welche Bilder Ihr vor Eurem geistigen Auge bzw. vor der Linse Eures iPhone oder iPad sehen könnt, wenn Ihr dieses Wort hört oder lest. Macht mit und beteiligt Euch an unserem Frühjahrsputz ---> Klick

CoreData und NSTableView heightOfRow => Warnung

  • Ersteller Deleted member 99757
  • Erstellt am

Deleted member 99757

Gast
Ich habe ein Problem mit NSTableView und heightOfRow. Beim ersten Mal wenn diese Methode aufgerufen wird bekomme ich immer die Meldung:

Warning: NSTableView/NSOutlineView variable row height code has detected re-entry. Avoiding a crash....

Code:
- (CGFloat)tableView:(NSTableView *)tableView heightOfRow:(NSInteger)row
{
	[ [ [ self arrangedObjects ] objectAtIndex: row ] valueForKey: @"display" ];
	return 50;
}

Der code ansich macht so keinen Sinn, aber er soll nur zeigen was ich mache. Also sobald ich valueForKey (sonst nicht) aufrufe, kommt die Meldung. Sobald das App dann gestartet ist, bekomme ich dann keine Warnung mehr. Was bedeutet diese Warnung? Und was soll ich nun tun? Habe verschiede Beispiele im Netz gefunden die heightOfRow nutzen und dort ist es ähnlich in Verwendung.

Danke für Eure Hilfe :)
 

sumpfmonsterjunior

Morgenduft
Registriert
17.03.05
Beiträge
167
Lässt sich so ins Blaue hinein zwar schwer sagen, aber vermutlich löst die display-Eigenschaft Deines Modells (?) ein redisplay Deines Tableviews aus (auch wenn Du nur lesend darauf zugreifst).
 

Deleted member 99757

Gast
"display" ist ein property, dass direkt im "Interface Builder" mit der TableColumn verbunden ist. Gibt es vielleicht eine Möglichkeit zu erkennen, ob die Tabelle schon aufgebaut ist? Anscheinend tritt das nur beim ersten Aufbau auf und vermutlich wird heightOfRow als erstes ausgeführt?
 

Deleted member 99757

Gast
display ist ein Transformable Attribute im DataModel und als

@property (nonatomic, retain) NSMutableAttributedString *display;

definiert. Mehr code gibt es nicht dazu.
 

sumpfmonsterjunior

Morgenduft
Registriert
17.03.05
Beiträge
167
Hast Du einen ArrayController abgeleitet?
Code:
...
[ self arrangedObjects ]
...
Ganz unabhängig von Deinem Problem solltest Du das nicht tun.
Vlt mal das Projekt posten?
 

Deleted member 99757

Gast
Hast Du einen ArrayController abgeleitet?
Ja ich habe eine eigene Klasse als NSArrayController für die Tabelle.

Code:
...
[ self arrangedObjects ]
...
Ganz unabhängig von Deinem Problem solltest Du das nicht tun.
Nein? Ok, dass wußte ich nicht! Wie komme ich an den Inhalt?


Vlt mal das Projekt posten?
Das ganze Projekt? Ist mittlerweile schon etwas größer. Was genau brauchst du ... musst du wissen?

Code:
@interface tabController : NSArrayController <NSTableViewDelegate>
{
...
}
...

@end

@implementation tabController

...
- (CGFloat)tableView:(NSTableView *)tableView heightOfRow:(NSInteger)row
{
	[ [ [ self arrangedObjects ] objectAtIndex: row ] valueForKey: @"display" ];
	return 50;
}
...

@end
 
Zuletzt bearbeitet von einem Moderator:

Deleted member 99757

Gast
Hallo sumpfmonsterjunior,

hast du (oder jemand anderes) noch einen Tip für mich? Google gibt mir irgendwie auch keine vernünftige Hilfe :(
 

Poljpocket

Salvatico di Campascio
Registriert
07.01.07
Beiträge
432
Wenn wir nicht wissen, wie dein Projekt aussieht, wie sollen wir denn bitte wissen, was wir brauchen, um dir zu helfen?

Gruss ppocket
 

sumpfmonsterjunior

Morgenduft
Registriert
17.03.05
Beiträge
167
Wie schon weiter oben geschrieben kann ich nur vage Vermutungen anstellen, aber womöglich löst Dein ArrayController ein redisplay aus (evtl. auto-rearranges content etc).
NSArrayController ist nicht zum Ableiten gedacht, packe die TableView-Delegate Methoden in einen eigenen Controller und gib diesem ein Outlet auf den ArrayController. Da vermischst Du zwei Sachen, die nicht zusammen gehören.

Gruß, SumpfMonsterJunior
 

Deleted member 99757

Gast
@ppocket:
ok verstehe. Hilft es dir, wenn ich hier mehrere 1000 Zeilen Code poste? Wenn ich weiß, welche Teile hilfreich sind, dann poste ich die gerne!

@sumpfmonsterjunior:
"Auto Rearrange Content" war beim Array Controller gesetzt :eek:

Herzlichen Dank ... das war es :-D
 
Zuletzt bearbeitet von einem Moderator:

sumpfmonsterjunior

Morgenduft
Registriert
17.03.05
Beiträge
167
Tu Dir den Gefallen und ändere Dein Design so, dass Du nicht von NSArrayController ableitest, sondern das Tableview in einen eigenen Controller packst (entweder von NSObject oder NSViewController erbend).

Dieser greift dann mittels eines Outlets auf den ArrayController zu.
 

Deleted member 99757

Gast
ok verstehe, werde ich abändern. Danke für deinen Hinweis.