Selektierten Dateinamen anzeigen lassen

  • Habe jetzt die restlichen 11 Tage mit Grundlagenbücher verbracht.
    Ich kann das Problem immer noch nicht lösen.

    In der AppDelegate werden normalerweise Objekte erstellt und Methoden aus den Klassen
    ausgeführt. Aber die Objekte in der TableView werden vom fileManagerController erzeugt.

    Wäre jemand so nett mein kleines Beispiel mal so zu modifizieren, das es klappt?
    Vielleicht kann ich dann dort verstehen wie und wo!

    ist ja nicht direkt ein Objectiv-C Vorgehensweise, sondern eher Cocoa.

    In meinen AppDelegate .m und.h steht nichts drin.
    Habe auch das TableView mit dem Delegate con fileManagercontroller verbunden, aber
    geht auch nicht?


    Vielen Dank

    M.
  • Nachdem einige Warnungen und Probleme beseitigt wurden:

    Vergleiche mal

    C-Quellcode

    1. - (void)tableViewSelectionDidChange:(NSNotification *)aNotification
    2. NSInteger dateiZeile = [outTableView selectedRow];
    3. if (dateiZeile == -1)
    4. {
    5. dateiZeile = 0;
    6. NSString *dateiName = [dataArray objectAtIndex:dateiZeile];
    7. NSIndexSet *indexSet = [NSIndexSet indexSetWithIndex:0];
    8. [outTableView selectRowIndexes:indexSet byExtendingSelection:NO];
    9. [tfDateiName setStringValue:dateiName];
    10. }
    11. }
    Alles anzeigen


    und überlege dir, was passiert, wenn dateiZeile != -1 ist. ;)

    Ich glaube ja, so geht es besser:

    C-Quellcode

    1. - (void)tableViewSelectionDidChange:(NSNotification *)aNotification
    2. {
    3. NSInteger dateiZeile = [outTableView selectedRow];
    4. if (dateiZeile == -1)
    5. {
    6. dateiZeile = 0;
    7. NSIndexSet *indexSet = [NSIndexSet indexSetWithIndex:0];
    8. [outTableView selectRowIndexes:indexSet byExtendingSelection:NO];
    9. }
    10. NSString *dateiName = [dataArray objectAtIndex:dateiZeile];
    11. [tfDateiName setStringValue:dateiName];
    12. }
    Alles anzeigen
    «Applejack» "Don't you use your fancy mathematics to muddle the issue!"

    Iä-86! Iä-64! Awavauatsh fthagn!

    kmr schrieb:

    Ach, Du bist auch so ein leichtgläubiger Zeitgenosse, der alles glaubt, was irgendwelche Typen vor sich hin brabbeln. :-P
  • Vielen Dank,

    es hat jetzt geklappt.

    Ich war so mit der neuen GUI-Technik so beschäftigt dort Fehler zu suchen, das ich die Abfragen völlig übersehen habe.
    Später hatte ich dann auch die Abfrage richtig, habe aber dann noch vergessen, das NSTextfield Delegate mit dem Controller
    zu verbinden. Erst danach ging es.


    Das wir mir mit Sicherheit nicht mehr passieren.

    Vielen Dank noch an alle für die vielen Informationen und Hilfe.

    M.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von michael m. ()

  • Noch eine Abschliessende Meldung:

    Quellcode

    1. // Ermittelt die Spalte mit inhalt
    2. - (id)tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex
    3. {
    4. if ([[aTableColumn identifier] isEqualToString:spaltenIdent])
    5. {
    6. return [self.dataArray objectAtIndex:rowIndex];
    7. }
    8. }



    Bei der letzten schliessenden geschweiften Klammer bekomme ich ein gelbes Zeichen mit dem Kommentar

    Meldung: Control may reach end of non-void function


    Kann das Ende der Funktion nicht erreichen?

    Die Klammerpaare die geöffnet werden, sind auch korrekt geschlossen!
    M.
  • michael m. schrieb:

    Bei der letzten schliessenden geschweiften Klammer bekomme ich ein gelbes Zeichen mit dem Kommentar

    Meldung: Control may reach end of non-void function

    Kann das Ende der Funktion nicht erreichen?


    Und wieder: was, wenn nicht?
    Du deckst irgendwie immer nur den 'Wenn'-Fall ab, nie den 'Wenn nicht'-Fall.

    Wenn du also eine Tabellenspalte hast, die eben nicht mit spaltenIdent übereinstimmt (Beispiel: zweite Spalte mit Dateigröße), dann gibt deine Methode kein Objekt zurück.
    Dadurch wirst du vermutlich irgend eine Exception im späteren Verlauf produzieren, da dein TableView auf irgend ein Objekt != nil angewiesen ist.

    Also hilft

    C-Quellcode

    1. - (id)tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex
    2. {
    3. if ([[aTableColumn identifier] isEqualToString:spaltenIdent])
    4. {
    5. return [self.dataArray objectAtIndex:rowIndex];
    6. }
    7. return @"something went wrong...";
    8. }
    «Applejack» "Don't you use your fancy mathematics to muddle the issue!"

    Iä-86! Iä-64! Awavauatsh fthagn!

    kmr schrieb:

    Ach, Du bist auch so ein leichtgläubiger Zeitgenosse, der alles glaubt, was irgendwelche Typen vor sich hin brabbeln. :-P