Schwerwiegendes Problem hier ... Ich erhalte ECX_BAD_ACCESS, wenn ich NSLog eine Instanzvariable meines benutzerdefinierten Objekts versuche. Die folgende Funktion wird in ViewController aufgerufen: payload
enthält String-Daten, die aus einer URL abgerufen werden.Instanzvariablen nicht zugänglich
- (void) initVcardWithData:(NSString *)payload {
NSLog(@"1. initVcardWithData");
aVCard = [[vcardItem alloc] initWithPayload:payload];
VCardViewController *aVCardViewController = [[VCardViewController alloc] initWithVCard:aVCard];
[self presentModalViewController:aVCardViewController animated:YES];
[aVCard release];
}
So weit so gut. Die initWithWithVCard Funktion wird wie folgt, theVCard
und theVCardN
in @implementation definiert sind und auch als @property gesetzt (nonatomic behalten) in (.h) .:
-(id)initWithVCard:(vcardItem *)aVCard {
if(self = [super init]) {
theVCard = [aVCard retain];
theVCardN = [theVCard.PersonName retain];
}
NSLog(@"---- vCardViewController :: initWithVcard :: FirstName: %@", theVCard.PersonName.FirstName);
return self;
}
Wenn ich das theVCardN
Objekt in meinem Viewcontroller zugreifen aVCardViewController
innerhalb ViewDidLoad
alles funktioniert wie ein Charme. Ich habe einige Etiketten mit Daten von diesem Objekt gesetzt.
Wenn ich dann versuchen, auf die Instanzvariablen von theVCardN
innerhalb einer Funktion zuzugreifen, die von einer IBAction aufgerufen wird, die mit einer Schaltfläche in View verbunden ist, erhalte ich einen Fehler EXC_BAD_ACCESS an der Debugger-Konsole. Die Funktion, die Daten aus den Instanzvariablen zu ziehen versucht, ist wie folgt:
-(IBAction)addressbookButtonTapped {
NSLog(@"RETAIN COUNT FOR theVCard: %i", [theVCard retainCount]);
NSLog(@"RETAIN COUNT FOR theVCardN: %i", [theVCardN retainCount]);
NSLog(@"Save to Adressbook: %@", theVCardN.FirstName);
//[self dismissModalViewControllerAnimated:YES];
}
Die RetainCounter für theVCardN
Recht vor NSLog gibt „1“ zu nennen. Die NSLog-Zeile gibt dann EXC_BAD_ACCESS in der Debugger-Konsole zurück.
Irgendeine Idee?
Meine Vermutung ist, dass die vCard nicht richtig eingerichtet ist. – Eiko
bevor NSLog ausführen, geben Sie den Wert in gdb aus. Sie werden erfahren, was das eigentliche Problem ist. Setzen Sie den Cursor im Debug-Modus auf diese Zeile. Klicken Sie mit der linken Maustaste auf das gelbe Etikett, das angezeigt wird, und klicken Sie auf Beschreibung drucken. Sie können sehen, was der Wert ist. – Raxit
Die Ausgabe ist: 'Druckbeschreibung desVCardN.FirstName:' nichts mehr – MadMaxAPP