Probleme mit NSString stringByAppendingString

@pdr2002
Oops, leicht übergewichtige Vortunerin.

Nee, habe sehr wenig geschlafen und eine 40 Stunden Marathonlernerei hinter mich gebracht und bin wie tot. Da gehen mir die Gäule durch und ich war so froh, mal so eine Anwendung fertig zu bekommen und dann war alles für die Füße.

Liebe Grüße und Danke für Deine Worte
Karin
 
Dann schlafe Dich mal aus und frisch ans Werk, dann sieht die Welt auch schon viel besser aus... ;)
 
Nee, warte auf die Replik meiner Email an little_pixel.
Der schaut über das Projekt und wird es mir wahrscheinlich um die Ohren hauen.

Toll aussehen tut es aber für den Zweck, für den es gedacht ist.

Liebe Grüße
Karin
 
Ich baue gerade das Projekt neu. Dann hast Du ein Musterbeispiel.

Ist das in Ordnung, wenn wir es dann hier hochladen? Dann hat jeder etwas davon.

Viele Grüße
 
  • Gefällt mir
Reaktionen: frauenPower
Hi,

gerne, solange keiner Millionen damit verdienen will :D

Warum neu aufbauen, kann man mein Projekt nicht "retten"?

Ich vermute fasst, dass ich dann Deinem nicht folgen kann. Und dann bin ich auch nicht weiter.

Liebe Grüße
Karin
 
Das kann man alle so lassen, funktioniert ja. Ist halt nicht schön.
Habe Dir gerade mein neues Projekt gesandt. Hast aber noch den zweiten Teil zum Selbermachen ;-)

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?

Geht doch gar nicht mit "alloc".

Machmal wundert es mich denn doch, was man so alles übers Speichermanagement hört.

Erst wird die Instanzenvariable angelegt:
NSString *meinString;

Und dann geht es mit @property (nonatomic, retain) NSString *meinString; weiter
und in der Methodendatei folgt ein @synthesize meinString; (Release am Ende nicht vergessen, wo alle anderen Freigaben sind).

Und nun muss ich auf eine bereits angelegte Instanzenvariable eine neue anlegen?
meinString *neuerString = [[meinString alloc] init];
geht doch gar nicht. Da gibt es eine Methode alloc not found!

Stimmt, da gibt es ja noch die Apple-Erklärung. Kapiere ich nicht.

Ich dachte, wenn ich eine Instanzenvariable habe, dann dürfte ich mit dieser auch tätig werden.
Scheinbar nicht.

Seufz, da reicht mein Hirn nicht für
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?

Wenn du jemanden findest der dir hilft kann ich dir SubEthaEdit empfehlen. Dort kannst du dann Live zuschauen und dir nebenbei erklären lassen was derjenige da macht.
 
@little_pixl

Danke Dir für Deine Mühen.

Kapiere nichts und denke doch, dass ich es nicht hinbekommen werde.

Gebe jetzt doch erstmal auf und dass kann es ja wirklich nicht sein.

es ist nicht sehr schön das im AppDelegate umzusetzen. Ein eigenere Controller mit dem passenden View wäre sauberer. Da es aber so trivial ist "egal".
- das Beispiel zeigt Dir auch den Umgang mit lokalisierten Strings

Genau die Controllergeschichte stünde mir ja auch noch bevor.
Lokalisierte Strings. Nie gehört. Ganz was neues.

Jo, sag dann erstmal tschüss. Dass geht ja mal gar nicht und wirft alles über den Haufen, was die Literatur bis dato hergegeben hat.

Schoki ich komme...

Liebe Grüße
Karin
 
Hallo Karin

NSString Instanzen kann man nicht ändern, nachdem man sie erzeugt hat.

Das macht bei sehr vielen Anwendungen Sinn, da man immer sicher sein kann,
dass der Inhalt derselbe ist, solange man eine Referenz auf dieses Objekt hält.

Für NSString Objekte, die man modifizieren kann, gibt es NSMutableString, analog zu NSArray und NSMutableArray.

Du kannst es ja so machen

Code:
- (void)appendToMe:(NSString *)aString {
  NSString *appended = [[NSString alloc] initWithFormat:@"%@%@", mainString, aString];
  [meinString release];
  meinString = appended;
}

Aber das ist schwer zu sagen, kenn ja den Code nicht.
 
  • Gefällt mir
Reaktionen: frauenPower
@pmau

Ich wollte doch nur die eine Instanzenvariable verwenden und jetzt kommt hier jeder mit etwas anderem, wo sicherlich jeder auch Recht hat.

für was lege ich mir die denn an, wenn ich da mit alloc und init nochmal ran muss. Und wenn ich da nicht ran muss, für was property?

Meine Anwendung läuft, es gibt halt nur Leaks.

Seufz
Karin
 
Und nun muss ich auf eine bereits angelegte Instanzenvariable eine neue anlegen?
meinString *neuerString = [[meinString alloc] init];
geht doch gar nicht. Da gibt es eine Methode alloc not found!

du hast ja auch keine klasse meinString...
NSString *meinString = [[NSString alloc] init];
wäre richtig.

das kannst du dir ja auch sparen je nach dem wie du meinString füllst.
NSString *meinString = @"blah";

dadurch, dass du meinString schon als property gemacht wird, kannst du ja auch das NSString weglassen.
meinString = @"blah";
 
Zuletzt bearbeitet:
@pmau
Ich wollte doch nur die eine Instanzenvariable verwenden und jetzt kommt hier jeder mit etwas anderem, wo sicherlich jeder auch Recht hat.

Dann schau nach NSMutableString. Damit kannst Du machen, was Du vorhast.

Ich wollte nur anmerken, dass es sinnvoll ist konstante Instanzvariablen garantieren zu können, die sich nach der Initialisierung nicht ändern kann oder soll.

Gruss,
Patrick
 
dadurch, dass du meinString schon als property gemacht wird, kannst du ja auch das NSString weglassen.
*meinString = @"blah";

"Assigning to 'NSString' from incompatible type 'NSString *'

Nee, nee, so wird das nichts, wenn schon ein String so einen Aufwand macht.

Liebe Grüße
Karin
 
meinString = @"Ich bin's";
Ohne das "*" ...
 
Habe ich doch gemacht und bekam Prügel:
Zugriff auf "ausgabeText" ohne Setter bzw. Getter

Bitte sagt mir doch, wie nun auf meine Instanzenvariable so zugreifen kann, dass ich kein Leak bekomme.
Meine Vorgehensweise:
  1. In der .h NSString *meinString;
  2. in der .h: @property (nonatomic, retain) NSString *meinString;
  3. In der .m: @synthesize meinString;
  4. in der .m bei -(void)dealloc: [meinString release]
  5. Und jetzt. Wie fülle ich die Variable mit Inhalt? Mit meinString = @"Test"; geht es, aber es wird ein Leak erscheinen.

Dass kann doch so schwer nicht sein?

Liebe Grüße
Karin
 
wenn du es nur mit
meinString = @"test";
machst, dann brauchst du auch kein release machen.
der release ist nur notwending, wenn du es mit alloc init machst
NSString *meinString = [[NSString alloc]init];
[meinString release];

hast du überhaupt mal die memory management guidelines gelesen?
 
hast du überhaupt mal die memory management guidelines gelesen?

Ja, aber da werde ich auch nicht schlauer.

Laut Bücher dürfte ich mich eh nur darum kümmern, wenn ich mit alloc, init, new arbeite. Aber so ganz scheint dass dann auch nicht zu gelten.

Ich blicks nett und jeder macht es scheinbar auch ein wenig anders.

In meinen Büchern, so auch im Videokurs zur iPhone-Programmierung wird darauf hingewiesen, dass man "release" auch bei "property" machen soll und irgendwie glaube ich der ganzen Geschichte links wie rechts nicht mehr.

Mal sehen, was passiert, wenn ich die Instanzenvariable ganz weglasse, und quasi vor Ort erzeuge.

Liebe Grüße
Karin
 
Zurück
Oben Unten