29

UIAlertView で [OK] をタップするとアプリがクラッシュするときに、次のスタック トレースが表示されます。私のせいですか、それともiOS7のバグですか?これを修正する方法がわかりません。

OS Version:          iOS 7.0 (11A465)
Report Version:      104

Exception Type:  EXC_BAD_ACCESS (SIGSEGV)
Exception Subtype: KERN_INVALID_ADDRESS at 0x00000000
Triggered by Thread:  0

Thread 0 name:  Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0   libobjc.A.dylib                 0x39d50b36 objc_msgSend + 22
1   UIKit                           0x3212e3da -[UIAlertView(Private) modalItem:shouldDismissForButtonAtIndex:] + 58
2   UIKit                           0x31ed2036 -[_UIModalItemsCoordinator _notifyDelegateModalItem:tappedButtonAtIndex:] + 90
3   UIKit                           0x31ed1f3e -[_UIModalItemAlertContentView tableView:didSelectRowAtIndexPath:] + 890
4   UIKit                           0x31dd7326 -[UITableView _selectRowAtIndexPath:animated:scrollPosition:notifyDelegate:] + 1074
5   UIKit                           0x31e8a24e -[UITableView _userSelectRowAtPendingSelectionIndexPath:] + 210
6   UIKit                           0x31d3a96e _applyBlockToCFArrayCopiedToStack + 314
7   UIKit                           0x31cb246e _afterCACommitHandler + 426
8   CoreFoundation                  0x2f5141d2 __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 18
9   CoreFoundation                  0x2f511b74 __CFRunLoopDoObservers + 280
10  CoreFoundation                  0x2f511eb6 __CFRunLoopRun + 726
11  CoreFoundation                  0x2f47cce2 CFRunLoopRunSpecific + 518
12  CoreFoundation                  0x2f47cac6 CFRunLoopRunInMode + 102
13  GraphicsServices                0x3417727e GSEventRunModal + 134
14  UIKit                           0x31d1ea3c UIApplicationMain + 1132
15  MyApp                           0x000d8e5e 0xcb000 + 56926
16  libdyld.dylib                   0x3a25dab4 start + 0

アラート ビュー コード

UIAlertView *av = [[UIAlertView alloc] initWithTitle:@"Error"
    message:[NSString stringWithFormat:@"Es ist ein Fehler aufgetreten: %@", [error localizedDescription]]
    delegate:self
    cancelButtonTitle:@"OK"
    otherButtonTitles:nil];
[av show];

デリゲート メソッドを定義していません。

4

4 に答える 4

17

愚かな私は、アラート ビューのデリゲートを nil に設定するだけです

于 2013-09-25T10:01:07.557 に答える
13

のデリゲートUIAlertViewは の割り当てプロパティであるためUIAlertViewです。Appleのせいだと思います。これは ARC のウィーク ポインターである必要があります。ただし、これは割り当てプロパティであるため、デリゲートを破棄する前にアラート ビューのデリゲートを設定する必要がありますnil(ほとんどの場合、コントローラー クラスがポップまたはナビゲートされます)。デリゲートについての .h ファイルを読むと、UIAlertViewそれが割り当てプロパティであり、宣言の後に誰かが「//弱い参照」とコメントしていることがわかります。

于 2013-12-11T22:49:57.617 に答える
0

デリゲートを指定する必要がある場合は、アラート ビューで「自動リリース」を実行することもできます。

于 2014-09-23T17:15:10.533 に答える