キーボードの戻るボタンを押すと、メソッドが呼び出されます。整数を返す別のメソッドを呼び出した後、その整数に基づいてメッセージが作成されます。メッセージはUIAlterViewに渡され、ユーザーに表示されます。アラートにはオプションがありません(なぜ私は代理人を呼び出さないのですか)。しかし、単に何が起こったのかをユーザーに通知します。UIAlertViewが表示されず、 "EXC_BAD_ACCESS"エラーが発生しない
編集:以下は完全な方法です(以前は部分的に表示されていました)。 UIAlertView
の前にすべてをコメントアウトし、メッセージを渡す代わりに文字列@ "test"を代用すると、警告が正常に表示されます。私の構造で正しくメモリを扱っていませんか?
- (IBAction)joinButton {
struct userInfo localUser;
[emailAddress resignFirstResponder];
//convert textField text to char array in structure
localUser.firstName = [self convertStringtoCharArray:firstName.text];
localUser.lastName = [self convertStringtoCharArray:lastName.text];
localUser.username = [self convertStringtoCharArray:username.text];
localUser.email = [self convertStringtoCharArray:emailAddress.text];
localUser.ipAddress = [self convertStringtoCharArray:localIPAddress.text];
localUser.latitude = currentLocation.coordinate.latitude;
localUser.longitude = currentLocation.coordinate.longitude;
//pass structure to be sent over socket
int result = [myNetworkConnection registerWithServer:&localUser];
NSString *message = nil;
//process result of sending attempt
if (result == 0) {
//registration succesful
message = [NSString stringWithString:@"Registration successful"];
} else if (result == 1) {
//server unavailable
message = [NSString stringWithString:@"Server unavailable. Please check your wi-fi settings and try again."];
} else if (result == 2) {
//unable to establish connection
message = [NSString stringWithString:@"Unable to communicate with server. Please check your wi-fi settings and try again."];
} else if (result == 3) {
//username already in use
message = [NSString stringWithString:@"Username in use. Try another username."];
}
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Registration"
message:message
delegate:nil
cancelButtonTitle:@"Ok"
otherButtonTitles:nil];
[alert show];
[alert release];
}
私がコードを実行すると、iPhoneは警告を表示しようとしているのにクラッシュするようになります。コンソールにEXC_BAD_ACCESS
エラーが表示されます。アラートまたはメッセージを正しくリリースしていませんか?ここでは、コンソール出力は次のようになります。
Program received signal: “EXC_BAD_ACCESS”.
(gdb) backtrace
#0 0x30011944 in objc_msgSend()
#1 0x3054803e in NSPopAutoreleasePool()
#2 0x3054c808 in -[NSAutoreleasePool release]()
#3 0x30936ac4 in _UIApplicationHandleEvent()
#4 0x3204696c in PurpleEventCallback()
#5 0x30254a76 in CFRunLoopRunSpecific()
#6 0x3025416a in CFRunLoopRunInMode()
#7 0x320452a4 in GSEventRunModal()
#8 0x308f037c in -[UIApplication _run]()
#9 0x308eea94 in UIApplicationMain()
#10 0x000020bc in main (argc=1, argv=0x2ffff508) at /Users/reu2009/Documents/iPhone Development/Development/BuddyTracker/main.m:14
(gdb) frame 10
#10 0x000020bc in main (argc=1, argv=0x2ffff508) at /Users/reu2009/Documents/iPhone Development/Development/BuddyTracker/main.m:14 14 int retVal = UIApplicationMain(argc, argv, nil, nil);
編集:は[message release];
を取り除き、回答に基づいて[NSString stringWithString];
を使用して文字列を割り当てます。
メッセージをメッセージに置き換えると動作しますか?@ "test"? –
同じエラーです。私は条件付きメッセージ作成ブロックをコメントアウトしました。 –
非常に奇妙です。エラーが発生した行を特定するために、デバッガをステップアップしてみましたか?私たちが間違った場所を探しているのであれば、私はちょっと不思議です。 –