ここに重大な問題があります... カスタム オブジェクトのインスタンス変数を NSLog しようとすると、ECX_BAD_ACCESS が発生します。次の関数は、ViewController で呼び出され、payload
URL から取得された文字列データを保持します。
- (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];
}
ここまでは順調ですね。initWithWithVCard 関数は次のとおりで、theVCard
@ theVCardN
implementation で定義され、(.h) で @property (nonatomic、retain) としても設定されます。
-(id)initWithVCard:(vcardItem *)aVCard {
if(self = [super init]) {
theVCard = [aVCard retain];
theVCardN = [theVCard.PersonName retain];
}
NSLog(@"---- vCardViewController :: initWithVcard :: FirstName: %@", theVCard.PersonName.FirstName);
return self;
}
theVCardN
ViewControlleraVCardViewController
内のオブジェクトにアクセスすると、ViewDidLoad
すべてが魅力的に機能します。そのオブジェクトのデータでいくつかのラベルを設定しました。
theVCardN
次に、ビューのボタンに接続されている IBAction から呼び出される関数内からインスタンス変数にアクセスしようとすると、デバッガ コンソールで EXC_BAD_ACCESS エラーが発生します。インスタンス変数からデータを取得しようとする関数は次のとおりです。
-(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];
}
NSLog をtheVCardN
呼び出す直前の RetainCounter は「1」を出力します。NSLog 行は、デバッガー コンソールで EXC_BAD_ACCESS を返します。
何か案が ?