2012-02-17 17 views
5

मैंने एक्सकोड में सिंगल व्यू आईओएस एप्लिकेशन के रूप में एक नई परियोजना बनाई है। मैंने UIVebView को विस्तारित वेब व्यू नामक एक कस्टम क्लास बनाया है। स्टोरीबोर्ड में, मैं व्यू कंट्रोलर में एक वेब व्यू जोड़ रहा हूं और फिर WebCiew में ViewController.h में एक आईबीऑलेट बना रहा हूं। आईबीओलेट के लिए UIWebView क्लास का उपयोग करने के बजाय, मैं अपने क्यूसम वेबव्यू क्लास का उपयोग कर रहा हूं और इसके हेडर-फाइल को ViewController.h में भी आयात कर रहा हूं। अब मेरा व्यू कंट्रोलर क्लास वेबव्यू के वेब VIEW से जुड़ा हुआ है।क्रॉस आयात को कैसे संभालें?

अगला, मैं अपने वेब व्यू को UIViewController का संदर्भ रखना चाहता हूं। मैं फिर अपने WebView.h में ViewController.h आयात करता हूं, लेकिन फिर मुझे कुछ कंपाइलर त्रुटियां मिलना शुरू हो जाता है जैसे:

अज्ञात प्रकार का नाम 'वेब व्यू'; क्या आपका मतलब 'UIWebView' था?

मुझे लगता है कि समस्या यह है कि ViewController.h आयात WebView.h और WebView.h आयात ViewController.h। क्या उद्देश्य-सी में क्रॉस आयात करना संभव नहीं है?

उत्तर

10

प्रत्येक फ़ाइल को आयात करने के बजाय WebView.h और ViewController.h में, आपको इसके बजाय आवश्यक कक्षाओं की पूर्ववत करना चाहिए, फिर .m (कार्यान्वयन) फ़ाइलों के अंदर वास्तविक आयात करना चाहिए।

WebView.h

@class ViewController; // This pre-declares ViewController, allowing this header to use pointers to ViewController, but not actually use the contents of ViewController 

@interface WebView : UIWebView 
{ 
    ViewController* viewController; 
} 

@end 

WebView.m

#import "WebView.h" 
#import "ViewController.h" // Gives full access to the ViewController class 

@implementation WebView 


- (void)doSomething 
{ 
    [viewController doSomethingElse]; 
} 

@end 
2

आप एक सरल संदर्भ बनाने के लिए शीर्ष लेख आयात करने की आवश्यकता नहीं है। इसके बजाय आप वर्ग

@class WebView; 

का उपयोग कर इंटरफ़ेस में घोषणा कर सकते हैं, इस लिए पर्याप्त हो संकलक एक आउटलेट बनाने के लिए होगा। जब आप गुणों या वर्ग के तरीकों तक पहुंच बनाना चाहते हैं तो आपको केवल पूर्ण शीर्षलेख की आवश्यकता होती है।

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