0

スピナーグラフィックを使用してアラートダイアログを作成しています。

UIAlertView *alert; //(at top of controller)

alert = [[[UIAlertView alloc] initWithTitle:@"Looking for someone to connnect to via WiFi" message:nil delegate:self cancelButtonTitle:nil otherButtonTitles: nil] autorelease];
[alert show];

UIActivityIndicatorView *indicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
indicator.center = CGPointMake(alert.bounds.size.width / 2, alert.bounds.size.height - 50);

[indicator startAnimating];
[alert addSubview:indicator];
[indicator release];

そして、それは後でこのように却下されます:

[alert dismissWithClickedButtonIndex:0 animated:YES];

これにより、クラッシュが発生することがあります。

Sun Mar  7 12:01:29 unknown com.apple.SpringBoard[24] <Notice>: CoreAnimation: timed out fence 500
Sun Mar  7 12:01:29 unknown ReportCrash[1615] <Notice>: Formulating crash report for process someApp[1614]

とトレース:

Exception Type:  EXC_CRASH (SIGABRT)
Exception Codes: 0x00000000, 0x00000000
Crashed Thread:  0

Thread 0 Crashed:
0   libSystem.B.dylib               0x00090b2c __kill + 8
1   libSystem.B.dylib               0x00090b1a kill + 4
2   libSystem.B.dylib               0x00090b0e raise + 10
3   libSystem.B.dylib               0x000a7e34 abort + 36
4   libstdc++.6.dylib               0x00066390 __gnu_cxx::__verbose_terminate_handler() + 588
5   libobjc.A.dylib                 0x00008898 _objc_terminate + 160
6   libstdc++.6.dylib               0x00063a84 __cxxabiv1::__terminate(void (*)()) + 76
7   libstdc++.6.dylib               0x00063afc std::terminate() + 16
8   libstdc++.6.dylib               0x00063c24 __cxa_throw + 100
9   libobjc.A.dylib                 0x00006e54 objc_exception_throw + 104
10  CoreFoundation                  0x00026b2c +[NSException raise:format:arguments:] + 76
11  CoreFoundation                  0x00026acc +[NSException raise:format:] + 24
12  GameKit                         0x00025a50 -[GKPeerPickerViewController _shouldShowConnectTypeView] + 124
13  GameKit                         0x00026200 -[GKPeerPickerViewController loadInitialView] + 76
14  GameKit                         0x000262a4 -[GKPeerPickerViewController loadView] + 108
15  UIKit                           0x00069750 -[UIViewController view] + 44
16  GameKit                         0x000263fc -[GKPeerPickerViewController show] + 204
17  GameKit                         0x00023fbc -[GKPeerPickerController show] + 80
18  someApp                         0x00002a0c -[someAppViewController btnConnect:] (someAppViewController.m:43)
19  CoreFoundation                  0x00059888 -[NSObject performSelector:withObject:withObject:] + 20
20  UIKit                           0x0005b77c -[UIApplication sendAction:to:from:forEvent:] + 128
21  UIKit                           0x0005b6e4 -[UIApplication sendAction:toTarget:fromSender:forEvent:] + 32
22  UIKit                           0x0005b6ac -[UIControl sendAction:to:forEvent:] + 44
23  UIKit                           0x0005b304 -[UIControl(Internal) _sendActionsForEvents:withEvent:] + 528
24  UIKit                           0x0005bf84 -[UIControl touchesEnded:withEvent:] + 452
25  UIKit                           0x0005a8f8 -[UIWindow _sendTouchesForEvent:] + 520
26  UIKit                           0x00059f8c -[UIWindow sendEvent:] + 108
27  UIKit                           0x00055788 -[UIApplication sendEvent:] + 400
28  UIKit                           0x0005508c _UIApplicationHandleEvent + 4528
29  GraphicsServices                0x000057dc PurpleEventCallback + 1044
30  CoreFoundation                  0x00057524 CFRunLoopRunSpecific + 2296
31  CoreFoundation                  0x00056c18 CFRunLoopRunInMode + 44
32  GraphicsServices                0x000041c0 GSEventRunModal + 188
33  UIKit                           0x00003c28 -[UIApplication _run] + 552
34  UIKit                           0x00002228 UIApplicationMain + 960
35  someApp                         0x0000266e main (main.m:14)
36  someApp                         0x00002604 start + 44

興味深いのは、GameKitのGKPeerPickerへの参照です。私はそれをどこにも使用していません(GameKitのGKSessionを使用していますが、GKPeerPickerコンポーネントを使用していません)。

4

2 に答える 2

0

UIAlertViewのドキュメントを確認した後:

alert = ... message:nil ...

nilドキュメントには、許可されていることについては何も書かれていません。

メッセージ
タイトルよりも詳細な説明テキスト。

その間

cancelButtonTitle
キャンセルボタンのタイトル、またはキャンセルボタンnilがない場合。

したがって、空の文字列を試してください。

于 2010-03-07T20:46:16.907 に答える
0

alert考えられる問題は、所有していない参照が保存されていることです。

これを試して:

- (void)hideAlert {
    [alert dismissWithClickedButtonIndex:0 animated:YES];
    [alert release];
    alert = nil;
}

- (void)showAlert {
    if (alert)
        return;
    alert = [[UIAlertView alloc] initWithTitle:@"Looking for someone to connnect to via WiFi" message:nil delegate:self cancelButtonTitle:nil otherButtonTitles: nil];
    [alert show];

    UIActivityIndicatorView *indicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
    indicator.center = CGPointMake(alert.bounds.size.width * 0.5f, alert.bounds.size.height * 0.5f);

    [indicator startAnimating];
    [alert addSubview:indicator];
    [indicator release];
}

- (void)dealloc {
    [alert dismissWithClickedButtonIndex:0 animated:YES];
    [alert release];
    [super dealloc];
}
于 2010-03-07T21:22:10.760 に答える