2010-10-24 10 views
6
-(void)showsearch:(id)sender 
{ 
    SearchViewController *searchview =[[SearchViewController alloc] initWithNibName:@"SearchViewController" bundle:nil]; 

    settingpopoverController = [[[UIPopoverController alloc] 
            initWithContentViewController:searchview] autorelease];    
    [searchview release]; 
    [settingpopoverController presentPopoverFromBarButtonItem:sender 
            permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES]; 


} 

जब मैं बटन पर क्लिक करता हूं, तो ऐप क्रैश हो जाता है और मुझे [UIPopoverController dealloc] reached while popover is still visible. संदेश मिला।तब भी पहुंचा जब पॉपओवर अभी भी दिखाई दे रहा है

+0

आप * व्यू * और * नियंत्रक * मिश्रण कर रहे हैं। SearchViewController एक नियंत्रक है, लेकिन आप इसे एक दृश्य कहते हैं। – Ross

उत्तर

3

समस्या आप

settingpopoverController = 

स्थापित कर रहे है जब आप

self.settingpopoverController = 
जिसके लिए

करने के लिए इसका मतलब है autorelease सही होगा। दूसरा एक संपत्ति एक्सेसर्स का उपयोग करता है, पहला सिर्फ iVar का उपयोग करता है।

+0

एक्सेसर्स? वास्तव में? –

+0

@ ओंज-सी 2.0 में और उससे परे, संजीत सालुजा, दूसरा वाक्यविन्यास - यह मानते हुए कि यह एक "रखरखाव" संपत्ति है - 'यूआईपीओवर कंट्रोलर' पर "बनाए रखने" को कॉल करेगा जिसे ओपी ऑटोरेलीज़ पर कॉल करता है। अन्यथा जब वर्तमान विधि समाप्त होती है, तो 'यूआईपीओपीओवर कंट्रोलर' स्वत: बंद हो जाता है, 0 की बरकरार संख्या तक पहुंच जाता है, और इसे हटा दिया जाता है। अगर आपको लगता है कि मुझे कुछ याद आ रहा है तो मुझे बताएं। –

6

वहाँ इस विषय पर कुछ अच्छी चर्चाओं यहां हैं:

  • एक बनाए रखने के लिए अपने autoreleased पॉपओवर आवंटित:

    Retain/release pattern for UIPopoverController, UIActionSheet, and modal view controllers?

    UIPopoverController and memory management

    यह का सार है कि आप की जरूरत है संपत्ति

  • संपत्ति को आपके विचार के सौदे में शून्य करने के लिए सेट करें लोक
  • साथ ही इसे पॉपओवर नियंत्रकडिडडिस्मिस्पॉप में नील करने के लिए सेट करना।
संबंधित मुद्दे