2013-09-25 9 views
29

में मेरी बग मुझे निम्नलिखित स्टैक ट्रेस मिला है जबकि मेरा ऐप UIAlertView पर "ठीक" टैप करने पर क्रैश हो गया है। क्या यह मेरी गलती है या आईओएस 7 बग है? मुझे नहीं पता कि इसे कैसे ठीक किया जाए।आईआईएस 7 बग या यूआईएलर्टव्यू

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]; 

और मैं एक प्रतिनिधि विधि परिभाषित नहीं किया है।

+1

क्या आप उस कोड को दिखा सकते हैं जिसका उपयोग आप अलर्ट व्यू और आपके द्वारा लिखे गए प्रतिनिधि विधि को प्रदर्शित करने के लिए करते हैं। धन्यवाद। – Fogmeister

+0

@Fogmeister ने कहा, क्या आप अपना अलर्ट कोड और उसके प्रतिनिधि कोड प्रदान कर सकते हैं? धन्यवाद! – matteodv

उत्तर

17

मुझे बेवकूफ, मैं सिर्फ क्योंकि UIAlertView के प्रतिनिधि UIAlertView में एक असाइन संपत्ति है नहीं के बराबर

+1

बिल्कुल, मैं बस इसके बारे में एक टिप्पणी लिख रहा था! :) – matteodv

+0

@matteodv धन्यवाद! –

+0

आपका स्वागत है! – matteodv

13

को सतर्क दृश्य के प्रतिनिधि सेट करना होगा। मुझे लगता है कि यह ऐप्पल की गलती है। यह एआरसी में एक कमजोर सूचक होना चाहिए। लेकिन यह एक असाइन प्रॉपर्टी है इसलिए प्रतिनिधि को नष्ट करने से पहले आपको किसी भी चेतावनी दृश्य के प्रतिनिधि को nil पर सेट करने की आवश्यकता है (अधिकांश समय नियंत्रक वर्ग पॉप या नेविगेट हो गया है)। प्रतिनिधि के बारे में UIAlertView के लिए .h फ़ाइल पढ़ें, आप पाते हैं कि यह एक असाइन प्रॉपर्टी है और किसी ने "// कमजोर संदर्भ" कहने के बाद टिप्पणी की है।

+0

है जो वास्तव में खुश है: प्रतिनिधि को ठीक से नष्ट कर दिया गया था चेतावनी दृश्य दिखाया गया था। –

+3

मुझे एक ही समस्या मिली, लेकिन यह हो रहा था केवल हम आईपीए बनाते हैं और इसे चलाते हैं। सिम्युलेटर या डीबग में क्यों नहीं? कोई उपाय? – Johnykutty

5

प्रतिनिधिमंडल का उपयोग करते समय UIAlertView के साथ समस्या से बचने का सबसे अच्छा तरीका प्रतिनिधि वर्ग के लिए iVar के रूप में UIAlertView का उदाहरण बनाते हैं। और तुम्हारे जाने के बाद प्रतिनिधि वर्ग

@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]; 
} 

की dealloc में शून्य के रूप में alertView के प्रतिनिधि संपत्ति बनाना चाहिए एक ही दृष्टिकोण असाइन प्रकार प्रतिनिधियों के साथ सभी पुराने वर्गों के लिए काफी अच्छा है।

0

यदि आपको एक प्रतिनिधि निर्दिष्ट करने की आवश्यकता है, तो अलर्ट व्यू पर 'ऑटोोरलीज' करने से भी काम होगा।