Probleme mit NSString stringByAppendingString

frauenPower

frauenPower

Aktives Mitglied
Thread Starter
Dabei seit
21.06.2011
Beiträge
287
Reaktionspunkte
75
Ich lasse mir auf einen Button kleine Textfragmente aus einem Array anzeigen.
Funktioniert!

Wenn ich nun auf den Button klicke, wird folgende Methode ausgeführt:
Code:
//Textauswahl
- (IBAction)TextAuswahl {
    
    ausgabeText = [NSString stringWithFormat:@"%@", [buchstabenArray objectAtIndex:i+1]];
    
    TextOut.text = ausgabeText;

}
Funktioniert auch, das Textfragment wird angezeigt.

Nun möchte ich aber, dass mit jedem Klick sich der String erweitert um den neuen Text, auf den ich geklickt habe.

Dies wollte ich mit:
Code:
ausgabeText = [ausgabeText stringByAppendingString [NSString stringWithFormat:@"%@", [buchstabenArray objectAtIndex:i+1]]];
erledigen.

Pech nur: Dass das Ausgabefeld leer bleibt. Ich habe es auch schon mit einer Hilfsvariablen probiert, aber auch da bleibt das Textfeld leer.
:confused: Ich kapiere es nicht.

Kann mir da jemand auf die Sprünge helfen?

Danke und einen lieben Gruss
Karin
 
Juchuu,

ein neuerliches Retain und die Initialisierung beim ersten Programmstart brachte die Lösung.

Yepp, meine erste App ist kurz vor der Vollendung.

Liebe Grüße
Karin
 
Hallo Karin,

Dein Engagement ist löblich und Du hast schon so viele Tipps gesammelt.

… aber, Du "machst" alles falsch was "falsch" zumachen ist:

Code:
//Textauswahl
- (IBAction)TextAuswahl {
    
    ausgabeText = [NSString stringWithFormat:@"%@", [buchstabenArray objectAtIndex:i+1]];
    
    TextOut.text = ausgabeText;

}

- Methoden werden kleingeschrieben, siehe "TextAuswahl"
- Objekte werden kleingeschrieben, siehe "TextOut"
- Zugriff auf "ausgabeText" ohne Setter bzw. Getter

Letzter Punkt erklärt sicherlich warum es nicht funktioniert.

ein neuerliches Retain und die Initialisierung beim ersten Programmstart brachte die Lösung.
Warum wendest Du Properties nicht richtig an?

Ich bezweifle, dass das richtig balanciert wird und am Ende wieder freigegeben wird.
… oder bist Du schon so fit um die Speicherverwaltung zu Fuss zu gehen?

Viele Grüße
 
  • Gefällt mir
Reaktionen: frauenPower
Noch ein Tipp:

• wenn Du zukünftig mit anderen Entwicklern zusammenarbeiten möchtest, dann schreibe de Code in Englisch.
• greife nicht auf ein Objekt in einem Array zu, ohne zu wissen, dass es existiert. Das geht meist böse aus.

Viele Grüße
 
  • Gefällt mir
Reaktionen: below
HI,

zunächst einmal Danke für die Kritik, die ich gerne annehme.
Wenn es nirgends verständlich erklärt wird, dann weiß ich auch nicht, was ich tun soll. So einfach und so gut.

Dass mit dem Benennen nehme ich gerne an, hatte ich ja auch einen Thread für. Nur wenn einem eine Idee kommt, dann geht es halt auch mal für so ein kleines Programm "on the fly". Gelobe hier Besserung.

Null, Null, Null Ahnung, hinsichtlich der Properties. Die raffe ich nicht und da kann ich lesen, was ich will.
Mir wurde mal empfohlen für alle Objekte welche zu setzen, dann mache ich das halt pauschal.

Hab mal irgendwo hier gelesen, dass ich eine Anwendung auf "Leaks" testen könnte.
Kann mir jemand kurz sagen, wie ich das mache?

Liebe Grüße
Karin, die nun auch noch die Propertie-Baustelle zum Tausendsten angehen muss. Was für ein Aufwand um beispielsweise einen NSString.
 
Null, Null, Null Ahnung, hinsichtlich der Properties. Die raffe ich nicht und da kann ich lesen, was ich will.
Mir wurde mal empfohlen für alle Objekte welche zu setzen, dann mache ich das halt pauschal.

properties sind an sich nicht schwierig, du definierst halt darüber deine variablen im header und das synthesize erstellt sie dir dann im code inkl get und set methode...

Hab mal irgendwo hier gelesen, dass ich eine Anwendung auf "Leaks" testen könnte.
Kann mir jemand kurz sagen, wie ich das mache?

geh mal auf "build & analyze" in Xcode, dann kriegst du mögliche leaks in blau angezeigt...
 
@oneEight
Mache ich doch so mit den Properties:
Code:
@property (nonatomic, retain) NSArray *intervallArray;
@property (nonatomic, retain) NSArray *buchstabenArray;
@property (nonatomic, retain) NSString *vergleich2;   
@property (nonatomic, retain) NSTimer *timer;
@property (nonatomic, retain) NSString *ausgabeText;

Zusätzlich, dann noch das release:
Code:
- (void)dealloc
{
    
    [intervallArray release];
    [buchstabenArray release];
    [vergleich2 release];
    [timer release];
    [ausgabeText release];

Ach menno, dieses Speichermanagement ist echt für die Füße.
Da strengt man sich an, hat gerade mal 5 Sächelchen und trotzdem klappt es nicht mit der Speicherverwaltung und Setter und Getter und was weiß ich noch alles nicht.

Sorry, verliere die Geduld. Dass kann man nicht lernen.
:confused:
Karin

Natürlich auch noch @synthesize für die Gemeinde.
 
Tja Karin,

lass es bitte. Wenn Du dann irgendwann das mit dem Soeicher gerafft hast, kommt das nächste.
Und dann ändern die wieder was und das Ringelreihen geht von neuem los.

Und dieser Analyze ist auch eine ganz tolle Geschichte. Da kannste dann auch wieder reichlich Zeit reinhängen, um bei der zu erwarteten Ausgabe der Leaks, dann auf Deinen Code zu schliessen.

Es wird nicht gehen!

Die Ferien sind noch lang, nutze sie sinnvoll, aber nicht mit dem Versuch diesen Wahnsinn begreifen zu wollen
Andreas
 
und wo ist jetzt das problem mit den properties?
machst du überhaupt ein alloc init für die?
 
Danke Andreas, danke oneOEight.

ICH GEBE NICHT AUF!

Mehr dazu weiter unten
Karin
 
Zuletzt bearbeitet:
Hi Karin,

kluge Wahl. Irrsinn als Nichtinformatiker diesen Wahnsinn ergründen zu wollen.

Dir tolle Ferien jetzt.
Andreas
 
Menno, nein, ich gebe nicht auf!

Wer mag mal, gerne auch gegen Aufwandsendschädigung über meinen Code schauen und mir einmal vorführen, wie ich es richtig mit diesen 5 Objekten hinbekomme?

Ich raffe diesen Retain-Müll einfach nicht. Es muss doch möglich sein, einen NSString benutzen zu können ohne Halligalli. Dass ist doch absurd.

Groll
Karin
 
Wer mag mal, gerne auch gegen Aufwandsendschädigung über meinen Code schauen und mir einmal vorführen, wie ich es richtig mit diesen 5 Objekten hinbekomme?
Zeig mal her. Kann ja nicht schwer sein.

Viele Grüße
 
das wird doch alles in der memory management guideline erklärt.
auch um welche objekte du dich von hand kümmern musst.

wie erstellst du denn den string? mit alloc init?
oder kriegst du den von einer methode zurück?
 
Ich raffe diesen Retain-Müll einfach nicht. Es muss doch möglich sein, einen NSString benutzen zu können ohne Halligalli. Dass ist doch absurd.
Ist es Zauberei oder gar Hexerei mit NSString? Nein, man muss nur verstehen, dass es ein Objekt ist.
Entsprechend der Tatsache geht man dann mit einem String um, wie mit jedem anderen Objekt auch.

Viele Grüße
 
OK,

mal sehen.

Liebe Grüße
Karin
 
Sende mir mal Dein Projekt. Dann schaue ich rein.

Viele Grüße
 
Hi,

Danke Dir. Habe mich verrant.
Du hast 2 * Post von mir mit der .h und der .m-Datei, also die relevante Klasse.
Ich müsste nur an einem Objekt sehen, was es mit den Properties auf sich hat.

Dein Urteil ist sicher vernichtend, aber es läuft doch so schööön.

Liebe Grüße
Karin
 
Ich habe Dir geantwortet:
Bitte sende mir das Projekt als Zip an meine E-Mail Adresse.
Sonst muss ich erst alles zusammenfummeln. Danke.

Viele Grüße
 
  • Gefällt mir
Reaktionen: frauenPower
Dann mal Riesendankeschön.

Dass wird mein Musterprojekt, wo ich einmal eine lauffähige Propertiegeschichte sehen werde.
Und dann geht es ans retain count zählen.
Muss doch zu raffen sein.

Nochmals Danke, Datei ist unterwegs.

Liebe Grüße
Karin

P.S.: Das fertige Projekt kann ich ja dann mal gerne, wenn es vorzeigbar ist, (in ein paar Wochen) hier vorstellen.
 
Zurück
Oben Unten