2012-04-03 10 views
5

चूंकि मेरे पास हाल ही में एक आयात-चक्र था, इसलिए मैं शीर्ष -file में हेडर से सभी #import कथन (मेरी अपनी फ़ाइलों के बारे में) ले जा रहा हूं। मैंने संकलक को शांत करने के लिए @class और @protocol आगे-घोषणाओं को भी जोड़ा। हालांकि, मैं अब भी वह चेतावनी निम्नलिखित मिलती है:एक्सकोड गायब प्रोटोकॉल परिभाषा के बारे में चेतावनी देता है, भले ही @protocol का उपयोग किया जाता है

Cannot find the protocol definition for 'MyCustomDelegate'. 

जैसा कि मैंने कहा, वहाँ है एक @protocol MyCustomDelegate इससे पहले कि मैं @interface -Block में इसका इस्तेमाल करते हैं। दिलचस्प बात यह चेतावनी केवल तब होती है जब संबंधित प्रतिनिधि को किसी अन्य फ़ाइल में घोषित किया जाता है (जिसका शीर्षलेख .m -file में आयात किया जाता है)।

मैंने पढ़ा है कि एक समाधान प्रतिनिधि को एक अलग हेडर फ़ाइल में घोषित करना है और उस फ़ाइल को सीधे उस वर्ग के शीर्षलेख में आयात करना है जो प्रतिनिधि को लागू करता है। क्या यह वास्तव में जाने का रास्ता है? क्या कोई अन्य समाधान है? मुझे लगता है कि उन प्रतिनिधियों ने पहले ही हमारे कोड को पर्याप्त रूप से फहराया है, अब मुझे इसके लिए अपनी फाइल घोषित करनी चाहिए?

बेहतर समस्या को वर्णन करने के छोटे नमूना कोड:

NewFooController.h

#import <UIKit/UIKit.h> 

@protocol NewFooControllerDelegate; 

@interface NewFooController : UITableViewController 
    @property (nonatomic, weak) id<NewFooControllerDelegate> delegate; 
@end 

@protocol NewFooControllerDelegate 
@end 

HomeTableViewController.h

#import <UIKit/UIKit.h> 
@protocol NewFooControllerDelegate; 

// warning points to line below 
@interface HomeTableViewController : UITableViewController <NewFooControllerDelegate> 
@end 

HomeTableViewController.m

#import "HomeTableViewController.h" 
#import "NewFooController.h" 
@implementation HomeTableViewController 
@end 
+0

कहाँ NewFooController.h आयात कर में प्रोटोकॉल घोषणा निकाल सकते हैं? –

+0

क्षमा करें, मैं कोड के प्रतिलिपि और चिपका हुआ हिस्सा। ;) मैंने '#import" NewTaskController.h "को' #import "NewFooController.h' में बदल दिया है। –

उत्तर

0

HomeTableViewController.h प्रोटोकॉल का संदर्भ देता है, लेकिन इसे अभी तक घोषित नहीं किया गया है। यदि आप इसे उपयोग करने का प्रयास करने से पहले HomeTableViewController.h में NewTaskController.h आयात करते हैं, तो इसे आपकी समस्या का समाधान करना चाहिए।

बेशक आप तो HomeTableViewController.m

+2

मुझे पता है कि इसे घोषित नहीं किया गया है और मुझे पता है कि हेडर में इसे आयात करने से समस्या हल हो जाएगी। हालांकि, कारण मैंने हेडर से '.m'-file तक आयात को स्थानांतरित कर दिया था। इसलिए मुझे एक समाधान की आवश्यकता है जो चेतावनी से छुटकारा पाता है * और आयात-चक्र * का नेतृत्व नहीं कर सकता। जैसा कि मैंने पोस्ट किया है, एक व्यवहार्य विकल्प एक अलग फ़ाइल में प्रोटोकॉल घोषणा लिखना है। मैं सिर्फ यह जानना चाहता हूं कि मेरे समाधानों के अनुरूप कौन से समाधान हैं या नहीं। –

+0

@FlorianPilz, इस पर कोई अपडेट? मुझे एक ही समस्या है। –

0

अगर यह "सबसे अच्छा तरीका है" है सुनिश्चित नहीं हैं कि से आयात को दूर है, लेकिन वर्ग उससे पहले वर्ग हेडर फाइल प्रोटोकॉल लागू के आयात हैडर कोशिश कर सकते हैं।

HomeTableViewController.m

#import "NewFooController.h" 
#import "HomeTableViewController.h" 

@implementation HomeTableViewController 
@end 

और तुम HomeTableViewController.h

#import <UIKit/UIKit.h> 

@interface HomeTableViewController : UITableViewController <NewFooControllerDelegate> 
@end 
संबंधित मुद्दे

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