NSMutableString a resultados NSString en “mensaje enviado a la instancia desasignado”
-
11-10-2019 - |
Pregunta
Tengo datos en un NSMutableString, localPName. Quiero salvar los datos del usuario, así:
[[NSUserDefaults standardUserDefaults] setObject:aString forKey:@"thePNameKeyValue"];
El compilador está tratando siempre tan difícil de enseñarme sobre “mensaje enviado a la instancia desasignado.” Aparte de sintetizar y de un solo uso (que imprime los datos válidos), no veo donde fue tocado localPName, mucho menos “desasignado,” puesto en libertad, lo que sea.
NSMutableString *localPName;
NSString *whateverNSString;
@property(nonatomic,retain) NSMutableString *localPName;
@property(nonatomic,retain) NSString *whateverNSString;
@synthesize localPName;
@synthesize whateverNSString;
localPName = [[NSMutableString alloc] initWithCapacity:40];
// [localPName appendString:@""]; ← seems to make no difference
- (void)textFieldDidEndEditing:(UITextField *)textField {
NSMutableString *teststring=[NSMutableString stringWithString:textField.text];
localPName = teststring;
NSLog(@"at textFieldDidEnd, localPName='%@'",localPName); // ← prints correct data
}
De aquí en adelante estoy más o menos a comer.
Para responder a “¿Qué has intentado?” He incluido muchas de las sugerencias que he cadged de la ‘red. Cómo inicializar NSString a NSMutableString? Objective-C "mensaje enviado a la instancia 0x5633b0 desasignado" Los resultados de arriba fueron: (BGF) el símbolo de información 0x2f699fe0 Ningún símbolo coincide 0x2f699fe0.
// 1
//NSString *str1 = @"";
// str1 = [str1 stringByAppendingString:localPName];
// 2
// NSString *str1 = [[NSString alloc] initWithString:localPName];
// 3
// whateverNSString = [[NSString alloc] initWithString:localPName];
// 4
// whateverNSString =localPName; // message sent to deallocated instance, nonatomic,retain
// 5
// self.whateverNSString =localPName; // message sent to deallocated instance, nonatomic, retain
// 6
// whateverNSString =localPName; // message sent to deallocated instance, nonatomic, retain
// 7
// glbl_asNeededInt = [whateverNSString length]; // message sent to deallocated instance, nonatomic, copy
// NSLog(@"saveButton 3 length=%d",glbl_asNeededInt);
// 8
// whateverNSString = localPName; // crash. no crash log, no console. no nuthin'
// 9
// https://stackoverflow.com/questions/1354490/how-to-take-an-nsstring-out-of-an-nsmutablestring
// whateverNSString = [localPName copy];
// 10
// whateverNSString = (NSString*) localPName;
// 11
// NSString* aString = [NSString stringWithFormat: @"%@", localPName]; // message sent ...
// 12
// NSString* aString = [NSString stringWithString:localPName]; // message sent ...
Días de fiesta están subiendo. Mis gracias a la gente que sólo podría contribuir a conseguir un regalo o dos principios.
Solución
puntos testString
a un autoreleased instancia que se asigna directamente a instancia de variable. Se debe utilizar la incubadora en su lugar:
self.localPName = teststring;
Con que se tome la propiedad de la cadena (la incubadora toma la propiedad mediante la retención de la instancia) y también no se escapan de la instancia que ha asignado a él anteriormente (que se dará a conocer adecuadamente por el colocador).