Wie speichern Sie einen Wert von NSString als char-array innerhalb einer Struktur in Objective-C?

Ich habe Probleme bei der Zuweisung des Wertes eines NSString zu einem char * innerhalb einer Struktur von einer singleton-Klasse. Das folgende ist eine Vereinfachung meines Problems. Mein code nutzt weitere Felder in die Struktur und geht mehr NSStrings.

Sagen, ich habe eine singleton-Klasse "SingletonClass" mit einer Struktur (ich habe meine Hausaufgaben mit der Apple-Dokumentation und der Implementierung korrekt):

struct sampleStruct {
    char *string1;
    //other fields
} struct1;

mit dieser Methode setzt den Wert der struct1.string1 zu den NSString übergeben wurde:

- (void)initStructWithString:(NSString *)inputString {
     //warning: assignment discards qualifiers from pointer target type
     struct1.string1 = [inputString cStringUsingEncoding:NSUTF8StringEncoding];
}

und diese Methode, die verwendet struct1.string1:

- (void)useCharArray {
     //I would obviously be doing something more complex in reality
     printf("This is the char array: %s", struct1.string1);
     //doesn't print the value I assigned to it, but garbage
}

Wenn ich rufe initStructWithString:(NSString *)inputString in eine Klasse und versuche zu nennen useCharArray aus einer anderen Klasse struct1.string1 ist ein Haufen Müll. Beim Debuggen habe ich bestätigt, dass jede Klasse wird immer die gleiche Instanz dieser SingletonClass.

Ich bin immer noch lernen, Objective-C sowie C auf dem Weg, so bin ich mir bewusst, es könnte ein problem mit meinem Speicher-management. Ich weiß, ich [NSString cStringUsingEncoding] zugewiesen werden soll, eine const char * und nicht ein char *, aber ich weiß nicht, wie sonst, um darüber zu gehen, da das Feld in der Struktur ist ein char *. Ich habe versucht, andere Ansätze innerhalb initSructWithString wie das zuweisen einer neuen const char * das Ergebnis [NSString cStringUsingEncoding] und dann kopieren, die mit strlcpy zu struct1.string1. Diesen Ansatz hatte das gleiche Ergebnis.

Was ist die richtige Technik für die Speicherung des Werts einer NSString im char * innerhalb einer struct und wie kann ich sicherstellen, dass die Felder in dieser Struktur behalten Ihren Wert als die SingletonClass verwendet wird, die durch verschiedene Klassen?

Schreibe einen Kommentar