Hillegas Chapter6 Challenge1

Dieses Thema im Forum "Mac OS X Entwickler, Programmierer" wurde erstellt von wegus, 06.07.2005.

  1. wegus

    wegus Thread Starter MacUser Mitglied

    Beiträge:
    15.045
    Zustimmungen:
    1.318
    MacUser seit:
    13.09.2004
    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?
     
  2. andi.reidies

    andi.reidies MacUser Mitglied

    Beiträge:
    420
    Zustimmungen:
    0
    MacUser seit:
    08.02.2005
    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
     
    Zuletzt bearbeitet: 07.07.2005
  3. andi.reidies

    andi.reidies MacUser Mitglied

    Beiträge:
    420
    Zustimmungen:
    0
    MacUser seit:
    08.02.2005
    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
     
    Zuletzt bearbeitet: 07.07.2005
  4. wegus

    wegus Thread Starter MacUser Mitglied

    Beiträge:
    15.045
    Zustimmungen:
    1.318
    MacUser seit:
    13.09.2004
    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...
     
  5. andi.reidies

    andi.reidies MacUser Mitglied

    Beiträge:
    420
    Zustimmungen:
    0
    MacUser seit:
    08.02.2005
    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
     
  6. wegus

    wegus Thread Starter MacUser Mitglied

    Beiträge:
    15.045
    Zustimmungen:
    1.318
    MacUser seit:
    13.09.2004
    na das nenn ich mal ne Idee! Ich guck mal wenn ich Zeit hab! DANKE DIR!

    Gruß Wegus
     
  7. wegus

    wegus Thread Starter MacUser Mitglied

    Beiträge:
    15.045
    Zustimmungen:
    1.318
    MacUser seit:
    13.09.2004
    @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
     

Diese Seite empfehlen