开发者

App crashes on [UIAlertView show]

My app is crashing as soon as I want to show an alert. This code is pretty basic and I cannot find anything wrong with it. Can someone verify if I am doing something wrong?

@implementation SampleClass
- (void) showAlert
{
UIAlertView *alert = [[UIAlertView alloc]
                      initWithTitle:@"Make an informed choice"
                      message:@"Descriptive text"
                      delegate:self
                      cancelButtonTitle:@"Cancel"
                      otherButtonTitles:@"OK", nil];
[alert show];
[alert release];    
}
@end

The stack is:

0   libobjc.A.dylib                 0x3006bc98 objc_msgSend + 16
1   NESampleApp                     0x002ec5bc 0x1000 + 3061180
2   UIKit                           0x35584bee -[UIWindow _sendTouchesForEvent:] + 362
3   UIKit                           0x35584568 -[UIWindow sendEvent:] + 256
4   UIKit                           0x3556d30c -[UIApplication sendEvent:] + 292
5   UIKit                           0x3556cc4c _UIApplicationHandleEvent + 5084
6   GraphicsServices                0x35350e70 PurpleEventCallback + 660
7   CoreFoundation                  0x3599da90 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 20
8   CoreFoundation                  0x3599f838 __CFRunLoopDoSource1 + 160
9   CoreFoundation                  0x359a0606 __CFRunLoopRun + 514
10  CoreFoundation                  0x35930ebc CFRunLoopRunSpecific + 224
11  CoreFoundation                  0x35930dc4 CFRunLoopRunInMode + 52
12  GraphicsServices                0x35350418 GSEventRunModal + 108
13  GraphicsServices                0x353504c4 GSEventRun + 56
14  UIKit                           0x35597d62 -[UIApplication _run] + 398
15  UIKit                           0x35595800 UIApplicationMain + 664
16  NESampleApp                     0x0017d10c 0x1000 + 1556748
17  NESampleApp                     0x007d3720 0x1000 + 8202016

Update: After setting the delegate to nil, I get some more information along with the crash:

<Error>: -[CALayer isTransformGestureInput]: unrecognized selector sent to instance 0xb4c8a开发者_开发问答0
<Error>: *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[CALayer isTransformGestureInput]: unrecognized selector sent to instance 0xb4c8a0'


try this instead of [alert show]

[alert performSelectorOnMainThread:@selector(show) withObject:nil waitUntilDone:YES];


While this answer may not fix this particular (rather old) question, I did come here because I was having the same symptoms. The answer to my problem was that I was not passing in "nil" as a second item on otherButtonTitles:@"OK".

Bad:

UIAlertView *alert = [[UIAlertView alloc]
                      initWithTitle:@"Make an informed choice"
                      message:@"Descriptive text"
                      delegate:self
                      cancelButtonTitle:@"Cancel"
                      otherButtonTitles:@"OK"];

Good:

UIAlertView *alert = [[UIAlertView alloc]
                      initWithTitle:@"Make an informed choice"
                      message:@"Descriptive text"
                      delegate:self
                      cancelButtonTitle:@"Cancel"
                      otherButtonTitles:@"OK", nil];

What was interesting is that this only crashed my device, not the iOS simulator.


Your otherButtonTitles argument needs to be nil-terminated.

In general, methods that take a variable number of arguments, need to have nil at the end. For example:

[NSArray arrayWithObjects:objA, objB, nil];

and in your case:

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"error" message:@"message" delegate:self cancelButtonTitle:@"cancel" otherButtonTitles:@"otherbutton", nil];


Could it be that you are calling this method inside a block? That will cause it to crash. Try this from within your block:

[self performSelectorOnMainThread:@selector(showAlert) 
withObject:nil waitUntilDone:YES];

Had the same problem. This solved it. Answer adopted from: How do display a UIAlertView from a block on iOS?

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜