• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Viele hassen ihn, manche schwören auf ihn, wir aber möchten unbedingt sehen, welche Bilder Ihr vor Eurem geistigen Auge bzw. vor der Linse Eures iPhone oder iPad sehen könnt, wenn Ihr dieses Wort hört oder lest. Macht mit und beteiligt Euch an unserem Frühjahrsputz ---> Klick

Objective-C 2.0 - Declared Properties (Unklarheit)

Jamsven

London Pepping
Registriert
21.11.07
Beiträge
2.046
Das ist sie beim ihm ja auch nicht. Deshalb bekommt er ja die Warnung vom Compiler und die Fehlermeldung zur Laufzeit.

Wie kann der erste Code richtig sein, wenn er den falschen Methodennamen geschrieben hat? ;)
Ich rezitiere mich noch mal und du liest es zu Ende: ;)
Der erste Code ist demnach auch richtig, du hast nur den falschen Methodennamen geschrieben.
Neben dem falschen Methodennamen hat er die Nachricht auch noch ans Klassenobjekt geschickt und nicht an eine Instanz der Klasse. Objektive-C unterscheidet Klassenmethoden (+methode) und Instanzmethoden (-methode)!

MacApple

Da hab ich diesmal nicht aufgepasst. ;) Aber es ging mir primär um die Dot-Notation, wo er den Fehler eher umgangen als ausgemerzt hat.
 

MacApple

Schöner von Bath
Registriert
05.01.04
Beiträge
3.652
Ich rezitiere mich noch mal und du liest es zu Ende: ;)
Der erste Code ist demnach auch richtig, du hast nur den falschen Methodennamen geschrieben.
Ich habe bis zum Ende gelesen. Dein Satz ist aber ein Widerspruch in sich. Code ist richtig, wenn er das tut, was der Programmierer erwartet. Tut der Code das nicht, ist er falsch. Ob das nun an einem Tippfehler liegt oder am Vollmond ist egal. ;) Ein bisschen schwanger geht auch nicht.

MacApple
 

Jamsven

London Pepping
Registriert
21.11.07
Beiträge
2.046
Ich habe bis zum Ende gelesen. Dein Satz ist aber ein Widerspruch in sich. Code ist richtig, wenn er das tut, was der Programmierer erwartet. Tut der Code das nicht, ist er falsch. Ob das nun an einem Tippfehler liegt oder am Vollmond ist egal. ;) Ein bisschen schwanger geht auch nicht.

MacApple

Tut mir leid ich neige manchmal etwas zur Fuzzy-Logic. Da kann frau wenigstens auch ein bisschen schwanger sein. :p
Im Prinzip hast du Recht
 

Der Paule

Königsapfel
Registriert
26.05.07
Beiträge
1.199
Ok, aber trotzdem verstehe ich nicht warum bei dir die setter-Methode anscheindend:
Code:
-(void)strInput:(NSString*)x
ist.
Selbst deine verlinkte Refernenz erklärt:

Code:
@property float value;
is equivalent to:

- (float)value;
- (void)setValue: (float)newValue;
Ergo muss sie bei deinem Code:
Code:
-(void)setStrInput:(NSString*)x
heißen.

Der erste Code ist demnach auch richtig, du hast nur den falschen Methodennamen geschrieben.
Vergleiche dazu auch Hillegass 3.Ausg S.144-145. Leider hab ich vom Amin nur das alte Buch, da gabs die Dot-Notation und propertys noch gar net.

Btw.: Hillegass kritisiert Apple für diese Dot Notation, da Methodenaufrufe schon fest definiert sind.

Doch es sind Setter und Getter in einem. Der Compiler setzt intern "@property float value;" um, zu dem genannten Äquivalent in der Referenz. Als wären es zwei Methoden, die so lauten:
"- (float)value;" und
"- (void)setValue: (float)newValue; ".
Um jetzt z.b. die Setter Methode nicht nutzen zu wollen um eine Eigenschaft Schreibgeschützt zu machen, gibts du dem Compiler einfach das Attribute "readonly" mit. Also: "@property (readonly, retain) float value".
Damit enfällt die setValue Methode.
Richtig ist das ich Anfangs nicht mit der Instanz der Klasse gearbetet habe. Um dort mit den Zugriffsmethoden zu arbeiten.

Was die Punkt Notation angeht, darüber lässt sich streiten ob es wirklich sinnvoll ist in Obj-C diese einzuführen. Ich kenne Obj-C bis jetzt nur ohne Punkt Notation. Durch die Beschreibung zu properties bin ich das erste mal darauf gestoßen. Fällt zwar für mich leichter, da ich mit Sprachen arbeite die nur Punkt Notation nutzen. Aber einen Mischmasch halte ich für Sinnlos. Entweder ohne Punkt Notation und wenn, dann ein kompletter umbau. Halte ich für nicht machbar und wird auch nicht kommen.

Ohne Punkt Notation, klappt der Aufruf nicht. D.h. hier ist sie leider fällig. Gefällt mir persönlich jetzt nicht so gut, dass ich nur wegen den properties, die Notation anwenden muss und sonst nicht. Aber naja, die Faulheit weniger zu tippen siegt hier. :D

mfg
paule
 

Jamsven

London Pepping
Registriert
21.11.07
Beiträge
2.046
Ich weiß was @property macht.

Deine Deklationen sind auch vollkommen richtig, nur ohne Dot-Notation klappt das auch:

Code:
@implementation viewcontroller

-(void)convertBinToDec:(id)sender
{
 controller * con= [[controller alloc] init];
    [[S]controller[/S][COLOR="Red"]con[/COLOR] [COLOR="red"]set[/COLOR]StrInput:@"test"];
    [txtInput setStringValue:[con strInput]];
}

@end

Oder aber auch per key value coding:
Code:
@implementation viewcontroller

-(void)convertBinToDec:(id)sender
{   
    controller * con= [[controller alloc] init];
    [con setValue:@"test" forKey:@"strInput"];
    [txtInput setStringValue:[con valueForKey:@"strInput"]];
}

@end