Benutzerdefinierte Suche

Hillegas Chapter6 Challenge1

  1. wegus

    wegus Thread StarterMacUser Mitglied

    Mitglied seit:
    13.09.2004
    Beiträge:
    14.984
    Zustimmungen:
    1.546
    moin,
    ich nutze gerade mal wieder meine rare Freizeit zum Lernen. Kann mir mal ein Objective-C Könner helfen, ich stecke nämlich an obiger Stelle fest:

    Die Sortierreihenfolge soll in einem NSArrayController von

    caseInsensitiveCompare

    verändert werden auf

    length

    Ich hab das für ne PillePalle-Aufgabe gehalten und im InterfaceBuilder den sort Selector auf die length Methode des NSString dazu gesetzt. Gespeichert, neu compiliert un dachte ich sei fertig. Dann das:

    2005-07-06 21:57:15.348 RaiseMan[422] *** -[NSConstantString length:]: selector not recognized [self = 0x3a000]

    Wieso NSConstantString? Warum erkennt der length nicht? Den Doppelpunkt hab nicht ich angefügt, das macht der IB automatisch. Ich seh glaub ich den Wald vor lauter Bäumen nicht. Mag einer helfen?
     
    wegus, 06.07.2005
  2. andi.reidies

    andi.reidiesMacUser Mitglied

    Mitglied seit:
    08.02.2005
    Beiträge:
    420
    Zustimmungen:
    0
    Also der Doppelpunkt hinter "length" bezeichnet den Methoden-Selektor. Jedwede Methode in Objective-C wird durch so einen Selektor gekennzeichnet.

    Die Klasse NSConstantString scheint jedoch die Message length: nicht zu verstehen.

    Da ich jetzt den Rest des Programms nicht kenne.... hast Du das Array mittels String-Konstanten gefüllt (ala: @".....") ?!?

    ...meine Cocoa Kenntnisse sind leider auch noch nicht so weit gediehen, wie ich gern hätte....;-)

    Falls Du ne Lösung hast, sag mal Bescheid....

    andi
     
    andi.reidies, 07.07.2005
  3. andi.reidies

    andi.reidiesMacUser Mitglied

    Mitglied seit:
    08.02.2005
    Beiträge:
    420
    Zustimmungen:
    0
    Ok,

    hab gerade mal in den Hillegrass geschaut. Als Tipp steht da was von Key Paths !

    Kann es sein, dass Du als Sort Key Path für den Array Controller etwas wie:

    "personName.length"

    hinterlegen musst......

    ?!?!?

    andi
     
    andi.reidies, 07.07.2005
  4. wegus

    wegus Thread StarterMacUser Mitglied

    Mitglied seit:
    13.09.2004
    Beiträge:
    14.984
    Zustimmungen:
    1.546
    Ja, so in der Art! Du gibst im InterfaceBuilder beim NSArrayController

    den Namen der Spalte (Bezeichner) ein, benennst Dein Objekt (personName), das ein NSString ist und nennst dann die Methode (length:) nach der sortiert wird. Das sollte reichen. Wie dann nach der Compilierung NSConstantString herauskommt verstehe ich auch nicht, zumal es funktioniert, wenn ich mit caseInsensitiveCompare: alphabetisch sortiere! Der Keypath ist mit obigen Angaben m.E. gesetzt (KeyValueEncoding), irgendwas paßt ja aber offenbar nicht...
     
    wegus, 07.07.2005
  5. andi.reidies

    andi.reidiesMacUser Mitglied

    Mitglied seit:
    08.02.2005
    Beiträge:
    420
    Zustimmungen:
    0
    Hmmm.....

    also vielleicht hilft das (wie gesagt, ich bin auch gerade erst dabei mich per Hillegrass in XCode und Cocoa einzuarbeiten....)....

    1) schau mal nach, ob du anstatt "caseInsensitiveCompare:" "length:" eingegeben hast (anscheinend musst du den Sort Selector inkl. dem abschliessenden ":" eingeben)

    2) der Tipp mit den Key Paths deutet jedoch auf ein etwas anderes Vorgehen hin. Anscheinend musst du unter Sort Key: folgendes eintragen "personName.length" und dann unter Sort Selector: "compare:"

    Sag mal, ob es dann funktioniert, ggf. schick mir doch mal das Beispiel-Projekt per eMail.....

    gruss
    andi
     
    andi.reidies, 07.07.2005
  6. wegus

    wegus Thread StarterMacUser Mitglied

    Mitglied seit:
    13.09.2004
    Beiträge:
    14.984
    Zustimmungen:
    1.546
    na das nenn ich mal ne Idee! Ich guck mal wenn ich Zeit hab! DANKE DIR!

    Gruß Wegus
     
    wegus, 07.07.2005
  7. wegus

    wegus Thread StarterMacUser Mitglied

    Mitglied seit:
    13.09.2004
    Beiträge:
    14.984
    Zustimmungen:
    1.546
    @andi:
    Das war es :D
    Danke Dir! Ich hatte das in der Tat anders aufgefaßt. So wie Du es in Punkt 2) schreibst ist es richtig! Warum dann da was von NSConstantString stand, ist mir abe immer noch nicht klar. Zumindest hab ich den Punkt jetzt begriffen.

    Danke

    wegus
     
    wegus, 07.07.2005