NSPathCell

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Hallo, ich würde gerne eine NSPathCell zu einem TableView hinzufügen. Das funktioniert soweit auch ohne Probleme, aber wenn ich versuche über den eingebauten Menüpunkt zum ändern des Ortes (PopUp-Button Style Path Cell) den Pfad zu verändern, öffnet sich zwar der Öffnen-Dialog, aber nach klicken auf OK bleibt der Pfad unverändert. Der Spalten des Table Views werden durch einen Array Controller gefüllt. Im Interface Builder ist anstelle der Path Cell eine TextFieldCell. Die Path Cell wird in AwakeFromNib-Funktion gesetzt. Die Spalte ist mit einem Array voller NSURLs verbunden. (in einem Dictionary: Array des Array Controllers -> Dictionary -> NSURL) Die Pfade die im Array sind werden alle richtig angezeigt, aber wenn ich versuche den Pfad zu ändern passiert (wie schon gesagt) nichts. Log bleibt auch leer. Wie kann ich herausfinden woran es liegt? Oder kennt vielleicht auch schon jemand den Grund oder die Lösung oder hat eine Vermutung?
    Windows, nein danke...
  • Original von Clemens
    Wirklich niemand eine Idee? ?(


    Abgesehen davon, dass ich mich bislang noch nicht mit NSPathCell beschäftigt habe, kann ich der Fragestellung überhaupt nicht folgen. Ich habe keinerlei Vorstellung davon wie das aussehen soll, noch wofür es gut ist. Ich bin mir sicher anderen geht es ähnlich.

    Hilfreich wären ein oder zwei Screenshots, ein wenig Code den man auch mal bei sich ausprobieren kann ohne sich das selbst zu programmieren.
    Hoecker-Plot - eine neue Auswertungsmethode für Digitalproofs - http://www.hoecker-plot.de
  • Original von CLW
    Original von Clemens
    Wirklich niemand eine Idee? ?(


    Abgesehen davon, dass ich mich bislang noch nicht mit NSPathCell beschäftigt habe, kann ich der Fragestellung überhaupt nicht folgen. Ich habe keinerlei Vorstellung davon wie das aussehen soll, noch wofür es gut ist. Ich bin mir sicher anderen geht es ähnlich.

    Hilfreich wären ein oder zwei Screenshots, ein wenig Code den man auch mal bei sich ausprobieren kann ohne sich das selbst zu programmieren.


    Das hilft doch schon einmal weiter, vielleicht hab ichs nur zu umständlich erklärt. Ist eigentlich relativ einfach:
    [Blockierte Grafik: http://emberapp.com/clemens/images/problem/sizes/o.png]

    Und der Code:

    Quellcode

    1. AppController.h
    2. @interface AppController : NSObject {
    3. NSMutableArray *einArray;
    4. NSTableView *tableView;
    5. }
    6. @property (nonatomic, retain) NSMutableArray *einArray;
    7. @property (nonatomic, retain) IBOutlet NSTableView *tableView;
    8. @end
    9. AppController.m
    10. @implementation AppController
    11. @synthesize einArray, tableView;
    12. - (id)init {
    13. self = [super init];
    14. if (self != nil) {
    15. NSMutableDictionary *einObjekt = [NSMutableDictionary dictionary];
    16. [einObjekt setObject:@"Hallo Welt!" forKey:@"key1"];
    17. [einObjekt setObject:[NSNumber numberWithInt:1] forKey:@"key2"];
    18. [einObjekt setObject:[NSURL URLWithString:@"file:///Users/Clemens/Music/iTunes"] forKey:@"destination"];
    19. einArray = [NSMutableArray arrayWithObject:einObjekt];
    20. }
    21. return self;
    22. }
    23. - (void)awakeFromNib {
    24. NSPathCell *pathCell = [[[NSPathCell alloc] init] autorelease];
    25. [pathCell setControlSize:NSSmallControlSize];
    26. [pathCell setPathStyle:NSPathStylePopUp];
    27. [pathCell setAllowedTypes:[NSArray arrayWithObject:@"public.folder"]];
    28. [[tableView tableColumnWithIdentifier:@"destination"] setDataCell:pathCell];
    29. }
    30. @end
    Alles anzeigen
    Windows, nein danke...
  • Original von CLW
    Wie teilst du denn deinem "einObjekt" mit, dass sich nach dem NSOpenPanel die URL für den key "destination" geändert hat? Das kann ich hier nämlich nicht erkennen.

    Ich hoffe drauf, dass das irgendwie automatisch passiert, so wie bei den anderen Spalten. Das scheint auch zu funktionieren. Ich hab eine Subclass von NSPathCell geschrieben, die die Werte, die an setUrl: und setObjectValue: gesendet werden ausgibt. Der richtige Pfad erscheint 1x, wird aber gleich mehrmals vom Alten Pfad wieder überschrieben.
    Windows, nein danke...
  • Original von CLW
    Original von Clemens
    Ich hab eine Subclass von NSPathCell geschrieben, die die Werte, die an setUrl: und setObjectValue: gesendet werden ausgibt.

    Zeig mal...

    2010-02-08 16:28:10.917 App[88693:a0f] setObjectValue: (null)
    2010-02-08 16:28:10.920 App[88693:a0f] setURL: (null)
    2010-02-08 16:28:10.920 App[88693:a0f] setObjectValue: file:///Users/Clemens/Music/iTunes
    2010-02-08 16:28:10.921 App[88693:a0f] setURL: file:///Users/Clemens/Music/iTunes
    2010-02-08 16:28:11.465 App[88693:a0f] setObjectValue: (null)
    2010-02-08 16:28:11.466 App[88693:a0f] setURL: (null)
    2010-02-08 16:28:11.467 App[88693:a0f] setObjectValue: file:///Users/Clemens/Music/iTunes
    2010-02-08 16:28:11.468 App[88693:a0f] setURL: file:///Users/Clemens/Music/iTunes
    2010-02-08 16:28:12.552 App[88693:a0f] setObjectValue: (null)
    2010-02-08 16:28:12.553 App[88693:a0f] setURL: (null)
    2010-02-08 16:28:12.555 App[88693:a0f] setObjectValue: file:///Users/Clemens/Music/iTunes
    2010-02-08 16:28:12.556 App[88693:a0f] setURL: file:///Users/Clemens/Music/iTunes
    2010-02-08 16:28:12.559 App[88693:a0f] setObjectValue: (null)
    2010-02-08 16:28:12.559 App[88693:a0f] setURL: (null)
    2010-02-08 16:28:12.560 App[88693:a0f] setObjectValue: file:///Users/Clemens/Music/iTunes
    2010-02-08 16:28:12.562 App[88693:a0f] setURL: file:///Users/Clemens/Music/iTunes
    2010-02-08 16:28:22.736 App[88693:a0f] setURL: file://localhost/Users/Clemens/Desktop/
    2010-02-08 16:28:22.744 App[88693:a0f] setObjectValue: (null)
    2010-02-08 16:28:22.744 App[88693:a0f] setURL: (null)
    2010-02-08 16:28:22.745 App[88693:a0f] setObjectValue: file:///Users/Clemens/Music/iTunes
    2010-02-08 16:28:22.745 App[88693:a0f] setURL: file:///Users/Clemens/Music/iTunes
    2010-02-08 16:28:22.750 App[88693:a0f] setObjectValue: (null)
    2010-02-08 16:28:22.750 App[88693:a0f] setURL: (null)
    2010-02-08 16:28:22.751 App[88693:a0f] setObjectValue: file:///Users/Clemens/Music/iTunes
    2010-02-08 16:28:22.752 App[88693:a0f] setURL: file:///Users/Clemens/Music/iTunes
    2010-02-08 16:28:29.707 App[88693:a0f] setObjectValue: (null)
    2010-02-08 16:28:29.709 App[88693:a0f] setURL: (null)
    2010-02-08 16:28:29.710 App[88693:a0f] setObjectValue: file:///Users/Clemens/Music/iTunes
    2010-02-08 16:28:29.710 App[88693:a0f] setURL: file:///Users/Clemens/Music/iTunes
    Windows, nein danke...
  • Tja, ich kann das Problem mittlerweile nachvollziehen. Momentan kann ich keine weitere Zeit dafür opfern der Sache detaillierter auf den Grund zu gehen.

    Ich vermute, dass dein Ansatz die NSPathCell in der Zelle des TableView "upzudaten" falsch ist. Die TableView reagiert ja normalerweise auf "reloadData" wenn sich etwas an der DataSource geändert hat. Bei dieser Art von Bindings scheint die TableView darüber aber nicht informiert zu werden. Du solltest das also anders angehen.

    Gruß
    Hoecker-Plot - eine neue Auswertungsmethode für Digitalproofs - http://www.hoecker-plot.de
  • Ich hab das Problem gelöst, indem ich die Daten über das NSTableViewDataSource-Protokoll übergebe und nicht mehr über den Array-Controller:

    Quellcode

    1. - (NSInteger)numberOfRowsInTableView:(NSTableView *)aTableView {
    2. return [einArray count];
    3. }
    4. - (id)tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex {
    5. return [[einArray objectAtIndex:rowIndex] objectForKey:[aTableColumn identifier]];
    6. }
    7. - (void)tableView:(NSTableView *)aTableView setObjectValue:(id)anObject forTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex {
    8. [[einArray objectAtIndex:rowIndex] setObject:anObject forKey:[aTableColumn identifier]];
    9. }
    Alles anzeigen
    Windows, nein danke...