2011-07-09 19 views
5

को क्रैश करने का कारण बनता है मुझे यकीन है कि यह कुछ बेवकूफ गलती है, लेकिन मैं बिना किसी सफलता के अपने पर्यवेक्षण से एक सबव्यूव निकालने के लिए पिछले घंटे की कोशिश कर रहा हूं।removeFromSuperview मेरे ऐप को

मेरा पहला दृश्य पर मैं

UIViewController *helpView = [[[UIViewController alloc] initWithNibName:@"HelpView" bundle:nil] autorelease]; 
[self.view addSubview:helpView.view]; 

आ रही हैं और फिर helpView अंदर मैं एक बटन है जो एक IBAction जो सिर्फ निम्नलिखित करता है "closeHelp" कहा जाता है से जुड़ा है है:

- (IBAction) closeHelp{ 
    [self.view removeFromSuperview]; 
} 

लेकिन इससे मेरा अजीब कुछ अजीब कारणों से EXC_BAS_ACCESS के साथ क्रैश हो जाता है, यहां तक ​​कि यह हेल्पव्यू के अंदर भी है, जिसका अर्थ है स्वयं। दृश्य को सही सबव्यू पर इंगित किया जाना चाहिए ..

वाह उल आपकी मदद की सराहना करें

धन्यवाद।
शाई।

+0

आपके पास किस वर्ग में '-क्लोज़ हेल्प' है? क्या यह इंटरफेस बिल्डर में सही तरीके से वायर्ड है? क्या आपने उस वर्ग के लिए HelpView.xib में कक्षा सेट की है? – Eiko

उत्तर

5

जैसे एंड्रियास ने उत्तर दिया, आप अपने सुपर/पैरेंट व्यू से self.view को हटाने का प्रयास कर रहे हैं। आपको मूल रूप से helpView को अपने मूल दृश्य से हटाने की आवश्यकता है।

तो यह

- (IBAction) closeHelp{ 
    [helpView removeFromSuperview]; 
} 

होना चाहिए लेकिन हम जानते हैं क्या उपरोक्त विधि में "helpView" है न। क्योंकि हमारे पास इसके लिए कोई संभाल नहीं है।

तो हमारा कोड अंततः इस तरह दिखना चाहिए।

#define HELP_VIEW_TAG 101 // Give tag of your choice 

HelpView *helpView = [[HelpView alloc] initWithNibName:@"HelpView" bundle:nil]; 
helpView.view.tag = HELP_VIEW_TAG; 
[self.view addSubview:helpView.view]; 
[helpView release]; 

- (IBAction) closeHelp{ 
    UIView *helpView = [self.view viewWithTag:HELP_VIEW_TAG]; 
    [helpView removeFromSuperview]; 
} 
+0

अरे, धन्यवाद! मैंने इस समाधान को करने का प्रयास किया लेकिन अब सबव्यू लोड भी नहीं होगा ... (EXC_BAD_ACCESS) UIViewController * helpView = [[[UIViewController alloc] initWithNibName: @ "HelpView" बंडल: nil] autorelease]; helpView.view.tag = HELP_VIEW_TAG; [self.view addSubview: helpView.view]; [helpView रिलीज]; –

+0

ठीक है अब यह दिखाता है (रिलीज के साथ कुछ बेवकूफ था), लेकिन बंद बटन अभी भी काम नहीं करेगा ... UIView * helpView = [self.view viewWithTag: 101]; [helpView removeFromSuperview]; (उदाहरण के मामले में टैग नंबर हार्ड-कोड किया गया था) –

+0

मुझे आशा है कि आपकी सहायता दृश्य सबव्यू के रूप में जोड़ा जा रहा है और प्रदर्शित होता है। मैं कल्पना कर रहा हूं कि आपके पास सहायता दृश्य पर एक करीबी बटन है और यह उपरोक्त आपके कोड में क्रिया विधि से जुड़ा हुआ है, जो स्वयं को खारिज कर देना चाहिए, क्या यह सही है? –

2

स्वयं .view आपके सबव्यूव को इंगित नहीं करता है, लेकिन रूट व्यू जो आपका यूवीवंट्रोलर प्रबंधित करता है। आपको शायद सबव्यू स्टैक में केवल अंतिम वस्तु को हटा देना चाहिए, न कि संपूर्ण दृश्य, क्योंकि अब आप संपूर्ण सहायता दृश्य को हटा रहे हैं।

वैसे भी, आप ऐसा करने के बजाए व्यू कंट्रोलर को सामान्य रूप से क्यों नहीं पेश करते?

[self presentModalViewController:helpView animated:NO/YES]; 

helpView. modalTransitionStyle = //One of the constants below 

UIModalTransitionStyleCoverVertical 
UIModalTransitionStyleFlipHorizontal 
UIModalTransitionStyleCrossDissolve 
UIModalTransitionStylePartialCurl 

आमतौर पर मैं ViewController जो रीति से प्रस्तुत किया जाएगा में self.modalTransitionStyle = // One of the constants लिख रहा हूँ, बजाय कोड के प्रसार का।

+0

यह विधि वैसे भी HelpViewController में है, और अंतिम वाक्य का कोई अर्थ नहीं है। यदि आप व्यू पदानुक्रम को संशोधित करना चाहते हैं, तो आपके विचार को वैसे भी लोड किया जाना चाहिए, और स्वयं का दृष्टिकोण दृश्य को संदर्भित करने का उचित तरीका है। – Eiko

1

आप helpView को UIViewController के रूप में प्रारंभ कर रहे हैं।
सुनिश्चित करें कि आपके पास (या जो भी helpView .h फ़ाइल कहा जाता है) दृश्य नियंत्रक की .h फ़ाइल में है जहां आप इसे प्रारंभ कर रहे हैं।

HelpView *helpView = [[HelpView alloc] initWithNibName:@"HelpView" bundle:nil]; 
[self.view addSubview:helpView.view]; 

कि यह ठीक करना चाहिए:

फिर, इस कोड का उपयोग करें।

+0

वह मूल रूप से कोड में है, अपने पर्यवेक्षण से self.view को हटाने का प्रयास कर रहा है, जो शायद शून्य होना चाहिए। –

+0

यह शायद सही जवाब है। – Abizern

-1
Declare the help view on calss level. 

in.h file 

@class HelpView; 
.. 
@interface 
{ 
HelpView *helpView; 
} 
@property(nonatomic,retain)HelpView* helpView; 


In.m file 
#import "HelpView" 
@synthensize helpView; 



now add this Code where you want 

helpView = [[HelpView alloc] initWithNibName:@"HelpView" bundle:nil]; 
helpView.view.tag = HELP_VIEW_TAG; 
[self.view addSubview:helpView.view]; 


- (IBAction) closeHelp{ 
    //UIView *helpView = [self.view viewWithTag:HELP_VIEW_TAG]; 
    [helpView removeFromSuperview]; 
} 

- (शून्य) dealloc { [helpView रिहाई]; }

+0

? मैं माता-पिता का अनुमान लगा रहा हूं? इस फ़ाइल के .m में –

+0

जोड़ें - (शून्य) dealloc {[helpView रिलीज]} – dark

+0

दृश्य नियंत्रकों के लिए प्रतिनिधियों को जोड़ने में बहुत अधिक बिंदु नहीं है। यह शुरुआती भ्रमित करता है; पी – Greg

0

सबसे आसान समाधान मुझे अंत में सिर्फ माता-पिता नियंत्रक के रूप में एक ही कक्षा के रूप में मेरे XIB की फाइल स्वामी को परिभाषित करने, माता पिता के नियंत्रक दोनों माता पिता और subview, जो सिर्फ एक बहुत आसान बना देता है नियंत्रण होगा, जिसका अर्थ था।:)

संबंधित मुद्दे