• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Die Bildungsoffensive hier im Forum geht weiter! Jetzt sollen Kreativität und technische Möglichkeiten einen neue Dimension erreichen. Das Thema in diesem Monat lautet - Verkehrte Welt - Hier geht es lang --> Klick

NSString

checker1992

Kaiser Wilhelm
Registriert
03.07.09
Beiträge
172
Hallöchen... ich habe eine (glaube ich) dumme Frage.

ich möchte in Xcode auf ein Label zugreifen und dessen Text ändern.
Dies habe ich so versucht: myLabel.text = NSString(@"Hallo Welt");
Leider bekomme ich da immer eine Fehlermeldung, aber ich weiß nicht wo der Fehler liegt.
Codeausschnitt ist angefügt.
Danke für eure Hilfe
 

Anhänge

  • Code.jpg
    Code.jpg
    36,7 KB · Aufrufe: 107
Also der Zugriff soll beim Aktivieren des elements mySwitch erfolgen.
 
1.: Wozu das "NSString(" und ")" um das Literal? Ein NSString-Literal ist doch schon ein Objekt der Klasse NSString.

2.: Die Fehlermeldung hat nichts mit NSString zu tun, sondern mit der völlig falschen Objective-C-Syntax: Eckige Klammern markieren das Senden einer Nachricht an ein Objekt: "[Objektname Nachricht]". Zuweisungen und Semikolon innerhalb eckiger Klammern ergeben keinen Sinn.
 
probiere mal:

- (IBAction) mySwitchChange {
if (mySwitch.on) {
myLabel.text = [NSString stringWithFormat:@"Hallo"];
}
}
 
Was spricht gegen „myLabel.text = @"Hallo";“?
Ich programmiere zwar nicht Objective-C, aber es würde mich *sehr* schwer wundern, wenn es nötig wäre, aus einem NSString-Literal eine neue NSString-Inzanz zu erzeugen. In der Regel ist das sogar ein unnützer Overhead (sofern die Klassenmethode stringWithFormat eine neue Instanz erzeugt). Immerhin sind NSStrings ja schließlich immutable! Auch enthält "Hallo" ja gar keine Format-Variablen, wozu also eine Methode zum Parsen von Format-Strings darüber laufen lassen?

Zum Ursprungsposting: Die öffnende [-Klammer müsste eine {-Klammer sein und die schließende ]-Klammer müsste ganz entfallen.
 
So also ich habe es jetzt der Lösung gemacht...
-(IBAction) mySwitchChange {
if ([mySwitch isOn]) { myLabel.textColor = [UIColor greenColor]; [myLabel setText:@"Das Switch steht auf 'an'!"];}
else {myLabel.textColor = [UIColor redColor]; [myLabel setText:@"Das Switch steht auf 'off'!"];}
}
!
Könnte mit trotzdem jemand die Lösung mit myLabel.Text = ... schicken?

Weiterhin würde ich gern bevor irgendetwas los geht, nach dem Switch schauen. Also ob es auf on oder off steht.
Aber so richtig weiß ich nicht wie ich vorgehen muss. Denn wenn ich einfach mit: if ([mySwitch isOn])...
beginne, klingelt eine Fehlermeldung.
Danke für eure Antworten =)
 
Könnte mit trotzdem jemand die Lösung mit myLabel.Text = ... schicken?
Statt
Code:
[myLabel setText:@"Der Text"];
schreibst Du einfach
Code:
myLabel.text = @"Der Text";

Weiterhin würde ich gern bevor irgendetwas los geht, nach dem Switch schauen. Also ob es auf on oder off steht.
Aber so richtig weiß ich nicht wie ich vorgehen muss. Denn wenn ich einfach mit: if ([mySwitch isOn])...
beginne, klingelt eine Fehlermeldung.
Ganz wichtig bei Fragen nach Hilfe: nie die Fehlermeldung den potentiellen Helfern mitteilen. Weil Fehlermeldungen sagen ja meist etwas über das Problem aus und das wäre für die potentiellen Helfer dann ja viel zu einfach.

MacApple
 
Also wenn du deinen String Formatieren möchtes, also zb. Variablen einfügen willst kannst du stringWIthFormat nutzen.
Ein kleines Beispiel:

Code:
[COLOR=#ffffff][B][COLOR=#04afc8]NSString[/COLOR] [/B][COLOR=#000000]*text = [NSString stringWithFormat[/COLOR][B]:[COLOR=#e2454c]@"Ausgabe einer String Var: %@ oder eines floats: %1.2f"[/COLOR][COLOR=#000000],[/COLOR][/B][COLOR=#000000] stringVar, floatVar];[/COLOR][/COLOR]
[COLOR=#000000][/COLOR]

Wenn du einfach nur Text einfügen willst nutz einfach diese Schreibweise:

Code:
[B][COLOR=#04AFC8]NSString[/COLOR] [/B][COLOR=#000000]*text = [/COLOR][COLOR=#ff0000]@"Dein Text";[/COLOR]

Viel Spass noch beim Programmieren.
 
Erstmal danke für die vielen Hilfrechen Antworten.
Was mich noch interessiert ist, wie bekomme ich es hin, dass das Switch von allein überprüft wird auf welchem Status es steht. Also nicht erst wenn darauf geklickt wird, sondern gleich am Anfang. Meistens steht es ja auf "off", aber es kann ja auch auf "on" stehen. Mit IBAction bekomme ich ja nur etwas hin, wenn der Benutzer mit dem Switch interagiert. Aber wie lautet die Funktion für das Überprüfen ohne Benutzereinwirkung.
Ich hoffe ihr versteht was ich meine.

Danke
 
füge in die viewDidLoad Methode einfach den Code der IBAction nochmal ein.

also

Code:
- ([COLOR=#bb2da2]void[/COLOR]) viewDidLoad {
[COLOR=#d42722][COLOR=#be299d]      if[/COLOR][COLOR=#000000] ([[/COLOR][COLOR=#4d8186]mySwitch[/COLOR][COLOR=#401f7d]isOn[/COLOR][COLOR=#000000]]) { [/COLOR][COLOR=#4d8186]myLabel[/COLOR][COLOR=#000000].[/COLOR][COLOR=#733ea4]textColor[/COLOR][COLOR=#000000] = [[/COLOR][COLOR=#733ea4]UIColor[/COLOR][COLOR=#401f7d]greenColor[/COLOR][COLOR=#000000]]; [[/COLOR][COLOR=#4d8186]myLabel[/COLOR][COLOR=#401f7d]setText[/COLOR][COLOR=#000000]:[/COLOR]@"Das Switch steht auf 'an'!"[COLOR=#000000]];}[/COLOR][/COLOR]
[COLOR=#d42722][COLOR=#be299d]      else[/COLOR][COLOR=#000000] {[/COLOR][COLOR=#4d8186]myLabel[/COLOR][COLOR=#000000].[/COLOR][COLOR=#733ea4]textColor[/COLOR][COLOR=#000000] = [[/COLOR][COLOR=#733ea4]UIColor[/COLOR][COLOR=#401f7d]redColor[/COLOR][COLOR=#000000]]; [[/COLOR][COLOR=#4d8186]myLabel[/COLOR][COLOR=#401f7d]setText[/COLOR][COLOR=#000000]:[/COLOR]@"Das Switch steht auf 'off'!"[COLOR=#000000]];}
}
[/COLOR][/COLOR]

 
(Redundanten Code sollte man aber besser in eine eigene Methode auslagern.)