Hillegas Chapter6 Challenge1

wegus

wegus

MU Team
Thread Starter
Dabei seit
13.09.2004
Beiträge
19.698
Reaktionspunkte
7.551
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?
 
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:
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:
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...
 
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
 
unter Sort Key: folgendes eintragen "personName.length" und dann unter Sort Selector: "compare:"

na das nenn ich mal ne Idee! Ich guck mal wenn ich Zeit hab! DANKE DIR!

Gruß Wegus
 
@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
 
Zurück
Oben Unten