2013-09-25 19 views
29

içinde hatam Uygulamam bir UIAlertView üzerinde "Tamam" üzerine dokunarak çökerken aşağıdaki yığın izlemesi var. Bu benim hatam mı yoksa iOS7 hatası mı? Bunu nasıl düzelteceğimi bilmiyorum.iOS 7 hata veya UIAlertView

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 

Uyarı görünüşüdür kodu

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

ve bir temsilci yöntemi tanımlamadınız. UIAlertView delegesi UIAlertView bir atama özelliği olduğu için

+1

Uyarı görünümünü ve ayrıca yazdığınız temsilci yöntemini görüntülemek için kullandığınız kodu gösterebilir misiniz? Teşekkürler. – Fogmeister

+0

@Fogmeister'in dediği gibi, uyarı kodunuzu ve temsilci kodunu verebilir misiniz? Teşekkürler! – matteodv

cevap

17

beni aptal, ben sadece nil

+1

Tam olarak, bunun hakkında bir yorum yazıyordum! :) – matteodv

+0

@matteodv teşekkürler! –

+0

Rica ederim! – matteodv

13

uyarı görünümün temsilci belirlemek zorunda. Bence Apple'ın hatası. ARC'de zayıf bir işaretçi olmalı. Ancak, bu özellik bir atama özelliğidir, böylece delegeyi yok etmeden önce herhangi bir uyarı görünümünün temsilcisini nil'a ayarlamanız gerekir (çoğu zaman bir denetleyici sınıfının atması veya geriye doğru gitmesi). Temsilci hakkında UIAlertView için .h dosyasını okuyun, bunun bir ata özelliği olduğunu ve bir kişinin "// zayıf referans" ifadesini kullandıktan sonra yorum yaptığını görebilirsiniz.

+0

Bu tam olarak ne oluyor: Delege hemen sonra yok edildi. uyarı görünümü gösterildi. –

+3

Aynı problemi aldım, ama sadece bir ipa oluşturup çalıştırdık. Simülatörde veya hata ayıklığında değil Neden? Herhangi bir fikir? – Johnykutty

5

Yetkilendirmeyi kullanırken UIAlertView ile sorundan kaçınmanın en iyi yolu, örneğini temsilci sınıfı için UIAlertView iVar örneğidir. Eğer temsilci sınıfının

@implementation YOUR_CLASS 
{ 
    UIAlertView *_alert; 
} 

- (void)dealloc 
{ 
    _alert.delegate = nil; 
} 


- (void)showAlertView 
{ 
    _alert = [[UIAlertView alloc] initWithTitle:title message:message delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
    [alert show]; 
} 

ait dealloc sıfır olarak alertView ait temsilci özelliğini yapmalıdır sonra Ve aynı yaklaşım atama tipi temsilcileri olan tüm eski sınıflar için yeterince iyidir.

0

Bir temsilci belirtmeniz gerekiyorsa, uyarı görünümünde 'autorelease' yapmak da işe yarayacaktır.