2010-07-21 18 views
11

मैं सिर्फ iphone विकास साथ शुरू हो रही हूँ मैं एक टैब किया आवेदन है और मैं रीति से तो मैं यहाँ Apple Dev देखा रूप में एक लॉग दिखाने के लिए चाहता था और मेरे विचार नियंत्रक में से एक के अंदर ऐसा किया मैं जुड़ा हुआ एक निम्नलिखित कार्रवाई करने के लिए बटन:वर्तमान मॉडल दृश्य नियंत्रक

#import "LoginForm.h" 
... 
-(IBAction)showLogin{ 
LoginForm *lf = [[LoginForm alloc]initWithNibName:@"LoginForm" bundle:nil]; 
lf.delegate = self; 
lf.modalPresentationStyle = UIModalTransitionStyleCrossDissolve; 
[self presentModalViewController:lf animated:YES]; 
} 

जब मैं निर्माण मैं अगर मैं दूसरी पंक्ति से छुटकारा पाने के लिए, यह बनाता है "कुछ नहीं एक संरचना या संघ में सदस्य 'प्रतिनिधि' के लिए अनुरोध" मिलता है लेकिन बटन दबाने करता है कुछ भी तो नहीं।

मुझे यहां क्या याद आ रही है?

+0

मैं अगर मैं एक ViewBased ऐप्लिकेशन पर समान कोड का उपयोग दूसरी पंक्ति पर एक ही त्रुटि मिलती है, लेकिन मॉडल दृश्य दिखाई देता है अगर मैं लाइन को दूर जब मैं बटन दबाएँ। .. क्या मुझे प्रतिनिधिमंडल के लिए कुछ खास चाहिए? और टैब्ड टेम्पलेट के लिए? – irco

उत्तर

19

लगता है जैसे आपने लॉग इनफॉर्म के लिए delegate सदस्य घोषित नहीं किया है। आपको कोड जोड़ने की आवश्यकता होगी जो UIViewController उदाहरण देता है जो लॉगिनफॉर्म को सामान्य रूप से लॉगिनफॉर्म प्रस्तुत कर रहा है।

LoginForm.h में:

@class LoginForm; 

@protocol LoginFormDelegate 
- (void)loginFormDidFinish:(LoginForm*)loginForm; 
@end 

@interface LoginForm { 
    // ... all your other members ... 
    id<LoginFormDelegate> delegate; 
} 

// ... all your other methods and properties ... 

@property (retain) id<LoginFormDelegate> delegate; 

@end 

LoginForm.m में: यहाँ कैसे अपने खुद के प्रतिनिधि घोषित करने के लिए है UIViewController उदाहरण है कि LoginForm प्रस्तुत में फिर

@implementation 

@synthesize delegate; 

//... the rest of LoginForm's implementation ... 

@end 

(यह MyViewController कॉल) :

MyViewController.h में:

@interface MyViewController : UIViewController <LoginFormDelegate> 

@end 

MyViewController.m में:

/** 
* LoginFormDelegate implementation 
*/ 
- (void)loginFormDidFinish:(LoginForm*)loginForm { 
    // do whatever, then 
    // hide the modal view 
    [self dismissModalViewControllerAnimated:YES]; 
    // clean up 
    [loginForm release]; 
} 

- (IBAction)showLogin:(id)sender { 
    LoginForm *lf = [[LoginForm alloc]initWithNibName:@"LoginForm" bundle:nil]; 
    lf.delegate = self; 
    lf.modalPresentationStyle = UIModalTransitionStyleCrossDissolve; 
    [self presentModalViewController:lf animated:YES]; 
} 
+0

बहुत बहुत धन्यवाद ... यही वह है जिसे मैं ढूंढ रहा था। प्रोटोकॉल घोषणा के अंदर यह एक आखिरी बात यह है कि मैं यह नहीं समझ सकता कि: "अपेक्षित ')' लॉग इनफॉर्म से पहले ' मुझे इसके साथ बहुत कुछ गलत नहीं लगता है। आपके कोड के साथ एकमात्र अंतर यह है कि मेरा फॉर्म UIViewController से विरासत में है, लेकिन ऐसा लगता है कि उस त्रुटि से संबंधित नहीं है – irco

+0

मेरा बुरा ... प्रोटोकॉल घोषणा से पहले मैं '@class लॉगिनफॉर्म; 'भूल गया था। मैंने अपने जवाब में स्रोत संपादित किया है। –

+0

धन्यवाद, मैं भी इतना है कि यह प्रोटोकॉल देख सकते हैं MyViewController में एक आयात किया था, और यह संकलित लेकिन यह अभी भी ShowLogin समारोह की पहली पंक्ति से टकराने सांत्वना न आया हुआ अपवाद 'NSInvalidArgumentException' से पता चलता पहले क्रैश हो, कारण : '- [UIViewController showLogin]: उदाहरण के लिए भेजा गया अपरिचित चयनकर्ता 0x5936080' – irco

0

ऐसा लगता है कि आपकी LoginForm कक्षा UIViewController से प्राप्त हुई है। UIViewController कक्षा में delegate संपत्ति नहीं है, इसलिए आपके द्वारा संकलित त्रुटि मिली है।

आपकी समस्या शायद यह है कि कार्रवाई को पहले स्थान पर नहीं कहा जाता है। एक कार्रवाई के लिए उचित हस्ताक्षर है:

- (IBAction)showLogin:(id)sender; 

sender तर्क की आवश्यकता है। यह सुनिश्चित करने के लिए अपनी विधि में एक ब्रेकपॉइंट रखें जिसे इसे कहा जाता है।

+0

मैं लॉगिनफॉर्म के लिए प्रतिनिधि को कैसे घोषित करूं? और हाँ मुझे लगता है कि आप सही हैं मैं ब्रेकपॉइंट को – irco

+0

हिट नहीं देख रहा हूं यह गलत है। एक एक्शन विधि या तो शून्य पैरामीटर या एक (इसे भेजने वाला नियंत्रण) ले सकती है, और इंटरफ़ेस बिल्डर खुशी से एक नियंत्रण (- IBAction) को नियंत्रित कर देगा जो भी विधि है। –

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