NSIndexPath length "unrecognized selector"

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

  • NSIndexPath length "unrecognized selector"

    Hi,

    ich kämpfe gerade mit NSIndexPath (XCode Version 8.2, Obj-C, Build-Target macOS 10.11) und komme nicht dahinter warum es nicht klappt. Hier habe ich 2 Zeilen mit NSLog die in meinem Code unmittelbar aufeinander folgen.

    Das Ergebnis dieser Log-Zeile ist verständlich ...

    Quellcode

    1. NSLog( @"selection %@ ", self.selectedSquad);
    selection (
    "<NSIndexPath: 0x61000003bf00> {length = 1, path = 4}"
    )

    Das Ergebnis dieser Zeile verstehe ich nicht ...

    Quellcode

    1. NSLog( @"selection length = %li", [self.selectedSquad length]);

    -[__NSArrayM length]: unrecognized selector sent to instance 0x610000056890

    Das "selectedSquad" ist als property


    Quellcode

    1. @property (strong) NSIndexPath * selectedSquad;

    definiert.

    Die Länge des NSIndexPath möchte ich verwenden, um einen Menu-Eintrag zu enablen. Immer wenn 'length' eine gerade Zahl ist, soll das Menue-Item enabled sein.

    Nur klappt das nicht, weil ich den "unrecognized selector" bekomme - nur warum kann ich nicht verstehen.

    Es ergibt den gleichen Fehler mit "section", "indexAtPosition:" - nur warum bekomme ich dafür den "unrecognized selector"?

    Wer weiss Rat?
    Wenn Du immer nur das tust was du schon kannst - wirst du immer das bleiben, was du heute bist.
  • Dein NSIndexPath ist ein Element eines NSArray:

    selection (
    "<NSIndexPath: 0x61000003bf00> {length = 1, path = 4}"
    )

    Die Klammern in der NSLog-Ausgabe sind ein erster Hinweis.
    Der zweite ist:

    -[__NSArrayM length]:

    Warum Dein NSIndexPath in einem Array steckt ist aus dem Quellcode nicht ersichtlich.
  • Der NSIndexPath ist an einen TreeController gebunden der ein Array von Nodes verwaltet.

    Nur sollte die 'length' Property des NSIndexPath die Anzahl der Indexe liefern und nicht die Länge (count) des Arrays - oder?
    Wenn Du immer nur das tust was du schon kannst - wirst du immer das bleiben, was du heute bist.
  • uschu.do schrieb:

    verstehe nicht was du mir "korrigiere doch die property" meinst.
    du hast da keinen NSIndexPath sondern ein NSArray.

    Wenn du das bindest bekommst du natürlich keine fehlermeldung weil es bei bindings ja egal ist (hauptsache eine objekt-property). Du kannst natürlich auch die binding ändern - ab aber keine ahnung welche du da verwendest und ob es möglich ist diese als NSIndexPath anstatt NSArray zu bekommen.
  • mit eueren Tips bin ich ein wenig weiter gekommen:

    Quellcode

    1. NSLog(@"selection %@ class name = %@", self.selectedSquad, [self.selectedSquad className]);
    2. NSLog(@"selected nodes %@", self.divisionsArrayController.selectedNodes);
    3. NSIndexPath * idxPath = self.divisionsArrayController.selectedNodes.lastObject.indexPath;
    4. NSLog(@"selected node path %@ length=%li", self.divisionsArrayController.selectedNodes.lastObject.indexPath, idxPath.length);
    ergibt diesen Log:

    selection (
    "<NSIndexPath: 0x61000022f660> {length = 2, path = 4 - 1}"
    ) class name = __NSArrayM
    selected nodes (
    "<NSTreeControllerTreeNode: 0x6100002c0b60>, child nodes {}"
    )
    selected node path <NSIndexPath: 0x610000223f80> {length = 2, path = 4 - 1} length=2


    Jetzt muss ich noch das Binding checken, warum ich hier ein Array anstelle des IndexPath bekomme.
    Wenn Du immer nur das tust was du schon kannst - wirst du immer das bleiben, was du heute bist.
  • Nun, wer lesen kann ist eindeutig im Vorteil.

    Beim Binding des TreeControllers ist ein keines 's' and Selected Index Paths. Damit bekomme ich immer ein Array der selektierten Zeilen.
    Wenn Du immer nur das tust was du schon kannst - wirst du immer das bleiben, was du heute bist.