0

文字列のフォーマット中に EXC_BAD_ACCESS を取得します。

NSString *object = [[NSUserDefaults standardUserDefaults] stringForKey:@"ObjectNumber"];
NSString *pin = [[NSUserDefaults standardUserDefaults] stringForKey:[NSString stringWithFormat:@"Pin%i ",object.intValue]];
NSString *msg = [NSString stringWithFormat:@"%@N", pin];

NSString *msg2 = @"0001N";

NSLog(@"Sending %@", msg);

tcpConnection *Obj = [tcpConnection alloc];
[Obj loadUpConnection:msg];

msg2 を使用すると、すべて正常に動作します。しかし、msg を使用すると、NSLog が msg を正しく出力しても、exc_bad_access を取得します。

4

2 に答える 2

3

loadUpConnection:メソッドがパラメーターを保持していないと思われます。

Objective-C に関しては、学ぶことがたくさんあるようです。

これが混乱を招くのではないかと心配していますが、msg2変数は文字列の静的インスタンスを指しています"0001N"(コンパイル時にシステムが静的インスタンスを作成して使用するため)。これが、 を使用するとクラッシュしないのにmsg2、を使用するとクラッシュする理由ですmsgmsg動的に割り当てられたインスタンスを指しています。返される参照は「autoreleased」です。これは、将来のある時点で解放されることを意味します (通常、実行ループの反復の最後に)。loadUpConnection:メソッドがそのパラメーターを保持していない場合、msg使用しようとする前に文字列が解放され、EXC_BAD_ACCESSエラーが発生します。は静的インスタンスであるためmsg2、割り当てが解除されることはなく、クラッシュすることはありません。

私の唯一のアドバイスは、学習を続けることです。本を手に取ってください。Stephen Kochan の「Programming in Objecive-C」または Aaron Hillegass の「iPhone Programming A Big Nerd Ranch Guide」をお勧めします。

于 2012-11-30T09:16:35.237 に答える
1

*Obj を初期化する必要があります。

tcpConnection *Obj = [tcpConnection alloc] init...

于 2012-11-30T09:17:24.457 に答える