NSManagedObject Elemente aus einer TableView auslesen

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

  • NSManagedObject Elemente aus einer TableView auslesen

    Hallo Leute,
    ich setze mich erst kurz mit Core Date auseinander.

    Bei meinen ersten Schritten bin ich auf ein Problem gestossen, wo ich fragen möchte wie man das elegant Lösen kann:

    Ich habe eine NSTableView mit einem ArrayController gebunden. Dabei will ich ein selektiertes Element auslesen einem

    Quellcode

    1. NSManagedObject * selectedObject
    t
    und einem weiteren xip per Binding übergeben.

    Mein Versuch war es mit

    Quellcode

    1. -(BOOL)tableView:(NSTableView *)tableView shouldSelectRow:(NSInteger)row
    es zu bewerkstelligen. Aber ich kann nicht auf diese Art auf das Element vom ArrayController zugreifen. Zumindest hab ich nichts brauchbares gefunden :(

    Muss ich mich mit einer "zwischen" Datenstruktur abkämpfen oder wie würdet Ihr das Lösen?

    DANKE für die Hilfe

    LG Chris
  • Ehrlich gesagt verstehe ich Deine Frage nicht. Das selektierte Object erhälst Du nicht durch den Tableview sondern durch den ArrayController. Den kannst Du dann auch weitergeben oder was immer Du gerne damit machen möchtest.
    Wozu Du shouldSelectRow benutzen willlst verstehe ich in dem Zusammenahng gar nicht.

    Gruß

    Claus
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)
  • gigo1968 schrieb:

    Antwort hab ich selbst darauf gefunden

    Quellcode

    1. Country *myCountry = [[self.countryController arrangedObjects] objectAtIndex:row];



    Einfacher wäre wahrlich

    C-Quellcode

    1. [[self countryController] selectedObject];

    Allerdings setzt das Lesen und Verstehen können voraus. :P
    «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
  • gigo1968 schrieb:

    Antwort hab ich selbst darauf gefunden


    Quellcode

    1. Country *myCountry = [[self.countryController arrangedObjects] objectAtIndex:row];




    DANKE für eure Mühe

    Dann hoffen wir mal, dass das Tableview keine eigene Sortierung hat …
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?
  • Leider ist der Delegate vom TableView früher als die Selection im ArrayController übernommen, somit wird beim Aufruf nach dem selektierten Element im ArrayController die "veraltete" Selection geliefert

    Quellcode

    1. -(BOOL)tableView:(NSTableView *)tableView shouldSelectRow:(NSInteger)rowNSArray
    2. Region * selectedObjects = [self.regionFromCountryController selectedObjects];
    3. for (NSManagedObject *region in selectedObjects) {
    4. self.selectedRegion = region;
    5. }
    6. [self selectPane:@"RegionVC"];
    Alles anzeigen



    wie kann ich das umgehen?!
  • Könnte daran liegen das keiner eine Idee hat was du da eigentlich machen willst.

    Das fängt mit der der Wahl der Methode an. Dies Methode erwartet einfach nur einen Bool ob eine Row selected werden soll. Dabei ist der Parameter ein Integer der die entsprechende Row angibt. Der Paramter heißt da row und nicht rowNSArray.
    Danach setzt du self.selectedregion völlig sinnfrei zigmal auf einen anderen Wert?

    Ich glaube Du hast da irgendwie ein ziemliches Grundlagen Problem.

    Gruß

    Claus
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)
  • gigo1968 schrieb:

    Leider ist der Delegate vom TableView früher als die Selection im ArrayController übernommen, somit wird beim Aufruf nach dem selektierten Element im ArrayController die "veraltete" Selection geliefert

    Quellcode

    1. -(BOOL)tableView:(NSTableView *)tableView shouldSelectRow:(NSInteger)rowNSArray
    2. Region * selectedObjects = [self.regionFromCountryController selectedObjects];
    3. for (NSManagedObject *region in selectedObjects) {
    4. self.selectedRegion = region;
    5. }
    6. [self selectPane:@"RegionVC"];
    Alles anzeigen



    wie kann ich das umgehen?!

    Klar, Delegatemethoden, die ein should enthalten, werden vorher ausgeführt, um dem Delegate die Möglichkeit zu geben, die Operation abzubrechen. Du musst eine Delegatemethode verwenden, die danach ausgeführt wird. Diese tragen did im Namen: +tableViewSelectionDidChange:

    Darüber hinaus, auch wenn es hier noch nicht angesprochen wurde: Du kannst auch gleich die Eigenschaft selectedObjects des Array-Controllers observieren. Das hat den Vorteil, dass du jede Selektionsänderung mitbekommst, auch dann, wenn diese nicht durch eine spezifischen View ausgelöst wurde. Ist Tatfrage, ob du das brauchst.
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?
  • Thallius schrieb:

    Könnte daran liegen das keiner eine Idee hat was du da eigentlich machen willst.

    Das fängt mit der der Wahl der Methode an. Dies Methode erwartet einfach nur einen Bool ob eine Row selected werden soll. Dabei ist der Parameter ein Integer der die entsprechende Row angibt. Der Paramter heißt da row und nicht rowNSArray.
    Danach setzt du self.selectedregion völlig sinnfrei zigmal auf einen anderen Wert?

    Ich glaube Du hast da irgendwie ein ziemliches Grundlagen Problem.

    Gruß

    Claus
    Er macht genau das, was hier vorgeschlagen wurde: Wenn eine Selektionsänderung im View erfolgt, fragt er den Array-Controller nach den selektierten Objekten. Er macht das nur zu früh. (Was er folgerichtig falsch macht, wenn er einfach nur den Tipp hier aus dem Thread übernimmt.)

    Verwunderlich ist nur die Schleife. Ein -firstObject würde da reichen.
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?
  • SUPER, DANKE Amin

    ich hab's gelöst, indem ich mehrere TableViews unterscheiden muss, bestimme ich mit - (BOOL)selectionShouldChangeInTableView:(NSTableView *)tableView welche TableView selektiert wurde. Anschliessend verwende ich - (void)tableViewSelectionDidChange:(NSNotification *)aNotification um mir das NSManagedObject von der richtigen TableView zu holen.
    Jetzt aber mit -firstObject, denn die Schleife ist logisch unnötig. ;)

    DANKE nochmals an alle!