2012-08-14 13 views
12

मैं आईओएस डेवलपमेंट के लिए काफी नया हूं, और मुझे यहां एक समस्या का सामना करना पड़ रहा है जिसे मैंने पहले नहीं सामना किया है। यहां मेरे पास है:आईबी - एक व्यू कंट्रोलर के लिए कक्षा असाइन नहीं कर सकता

मैंने एक प्रोजेक्ट बनाया है, कुछ व्यू कंट्रोलर अपने स्वयं के वर्गों से जुड़े हुए हैं। लेकिन अब, मैंने स्टोरीबोर्ड में एक नया व्यू कंट्रोलर जोड़ा है। फिर मैंने एक नया उद्देश्य-सी वर्ग बनाया (जिसमें UIViewController का उप-वर्ग है)। समस्या यह है कि आईबी में, मैं व्यू कंट्रोलर को नव निर्मित वर्ग से लिंक नहीं कर सकता, क्योंकि मेरे पास आईबी द्वारा प्रदान की गई सूची में कक्षा नहीं है (नीचे दी गई छवि देखें)। मेरी नई कक्षा को MapShownViewController कहा जाता है, लेकिन जैसा कि आप छवि पर देख सकते हैं, यह उपलब्ध नहीं है।

enter image description here

यह मेरी अन्य सभी वर्गों के लिए नहीं बल्कि यह एक के लिए अच्छी तरह से काम किया।

#import <UIKit/UIKit.h> 

@interface MapShownViewController : UIViewController 

@end 

और MapShownViewController.m:

#import "MapShownViewController.h" 

@interface MapShownViewController() 

@end 

@implementation MapShownViewController 

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    if (self) { 
    } 
    return self; 
} 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
} 

- (void)viewDidUnload 
{ 
    [super viewDidUnload]; 
} 

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{ 
    return (interfaceOrientation == UIInterfaceOrientationPortrait); 
} 

@end 

कोई मुझे बता सकते हैं कि मैं क्या कृपया गलत बनाया

यहाँ MapShownViewController.h है?

+3

'Map' एक दृश्य controller- अब' अपनी सूची में की तरह MapViewController' के लिए एक भयानक नाम टिप के लिए वैसे भी है लग रहा है अच्छा –

+0

यह उदाहरण के लिए था, लेकिन धन्यवाद! –

+0

क्या आप map.h का कोड जोड़ सकते हैं, कृपया ...? – meronix

उत्तर

26

मुझे यह सही समस्या थी और यह मुझे पागल कर दिया। मैंने पहली बार एक्सकोड को 4.4 से 4.4 तक अपग्रेड करने के बाद देखा। मेरे पास एक मौजूदा प्रोजेक्ट था जो मैं एक्सकोड के पुराने संस्करण में काम कर रहा था, और मैंने 4.4 में काम करना जारी रखा। मैंने वही किया जो आपने किया था और कहानी बोर्ड में एक नया दृश्य बनाया और फिर उप-वर्ग फाइलें बनाईं, लेकिन कक्षा आईबी में कस्टम क्लास ड्रॉपडाउन में उपलब्ध नहीं थी। बहुत गुगलिंग और निराशा के बाद मैंने एक्सकोड छोड़ दिया (पूरी तरह से छोड़ दिया, न सिर्फ बंद करें) और फिर इसे फिर से शुरू करें। फिर जैसे कि जादू से यह सब काम करना शुरू कर दिया और नई कक्षा आईबी कस्टम क्लास ड्रॉपडाउन में तत्काल उपलब्ध थी।

+0

यह वही है जो मैंने किया था, और वास्तव में यह तय किया गया था! –

+0

यह बहुत अच्छा है, आपको सॉर्ट किया गया है!मैं समझता हूं कि यह एक 'आईटी कॉल सेंटर' उत्तर (करीबी ऐप और पुनः शुरूआत) का थोड़ा सा है, लेकिन यह एकमात्र संगत तरीका है जिसे मैं इसे उस विशेष समस्या को ठीक कर सकता हूं। मैं कोई भी मूल्य जोड़ सकता हूं कि यह कैसे और क्यों इसे ठीक करता है, फिर मुक्त महसूस करें, लेकिन ऐसे समय तक, यह मेरा तय है। –

+0

एक ही मुद्दा था। नई एक्सकोड रिलीज – MrBr

0

जांचें कि आपने अपनी नई कक्षा में सही सुपर क्लास का चयन किया है या नहीं। कभी-कभी आप एक UITableVIewController द्वारा विरासत में एक दृश्य नियंत्रक बनाते हैं। इसे स्टोरीबोर्ड में व्यू कंट्रोलर पैटर्न पर लागू नहीं किया जा सकता है।

+0

मैंने दो बार चेक किया है, यह सही सुपरक्लास –

+0

है, मुझे एक ही समस्या है, मुझे परिभाषित नया सब क्लास नहीं दिख रहा है। – anwarma

4

अपनी परियोजना सेटिंग्स की जांच करें। xcode-> लक्ष्य-> चरणों का निर्माण-> संकलन स्रोत आपकी व्यू कंट्रोलर की कार्यान्वयन फ़ाइल को इस सूची में जोड़ा जाना चाहिए।

+0

मेरे पास फ़ाइल है, लेकिन यह अन्य फ़ाइलों की तरह नहीं है। मेरे पास "... [परियोजना नाम] में" इसके सामने नहीं है। ये केसे हो सकता हे ? –

+0

एक नया नियंत्रक जोड़ने का प्रयास करें। यह आपको फ़ाइल को लक्ष्य (प्रोजेक्ट और टेस्ट दोनों) में जोड़ने के लिए कहता है, हो सकता है कि आपने उन्हें चेक न किया हो। मुझे यकीन नहीं है। इस समस्या के लिए आप संकलित स्रोत टैब को संकलित फ़ाइल में हटा सकते हैं और जोड़ सकते हैं .. –

+0

मैंने इसे फिर से बनाया है। मैंने इसे प्रोजेक्ट में जोड़ने के लिए चेकबॉक्स चेक किया है। यह अब संकलन स्रोतों में सही ढंग से है। लेकिन मैं इसे सूची में नहीं देख सकता :( –

4

इसके लिए आपको के बारे में सुनिश्चित करना है काम करने के लिए निम्नलिखित:

1) तत्व स्टोरीबोर्ड को जोड़ा गया एक UIViewController

2) वर्ग आप परिभाषित UIViewController के रूप में किया गया है इसके सुपरक्लास

@interface MapShownViewController : UIViewController 

3) इस परियोजना में कक्षा सही ढंग से बनाई जा रही है।

+1

मैंने सभी सिद्धांतों का पालन किया है। सब ठीक है सिवाय इसके कि मुझे अभी भी कक्षा नहीं दिखाई दे रही है सूची: क्या यह एक अधिक सामान्य पैरामीटर हो सकता है जो सही ढंग से सेट नहीं किया गया है? –

16

उसी समस्या में भागो और एक्सकोड को पुनरारंभ करने में कोई मदद नहीं थी। आप हमेशा स्टोरीबोर्ड पर राइट क्लिक कर सकते हैं और Open As > Source Code चुन सकते हैं। एक्सएमएल फ़ाइल में आपके विचार नियंत्रक तत्व का पता लगाएं और एक customClass विशेषता जोड़ें:

<viewController title="Login" id="TJH-Bg-q4u" customClass="XYZLoginViewController" sceneMemberID="viewController"> 
    ... 
</viewController> 

मैनुअल ओवरराइड FTW :)।

+0

मुझे एक ही समस्या थी और इससे मेरा मुद्दा हल हो गया। सुनिश्चित नहीं है कि यह सुनिश्चित करने के लिए कि यह बार-बार नहीं होता है। – Laurent

+0

यह एकमात्र चीज है जो मेरे लिए काम करती है। एक्सकोड को पुनरारंभ करने से कस्टम क्लास ड्रॉपडाउन में कस्टम क्लास दिखाया गया है, सिर्फ दृश्य नियंत्रक के लिए नहीं जिसे मैं बदलना चाहता था! किसी कारण से, यह व्यू कंट्रोलर मुझे इसे असाइन करने की इजाजत नहीं देगा) ड्रॉप डाउन या बी) मैन्युअल रूप से इसे फ़ील्ड में टाइप करके। लेकिन यह मेरे सभी अन्य दृश्य नियंत्रकों के लिए होगा। विशेष दृश्य नियंत्रक जो मैं नहीं बदल सका था, नेस्टेड एनएवी नियंत्रक के साथ एकमात्र ऐसा था, जो मेरे लिए एकमात्र स्पष्ट अंतर था। – dragonflyesque

0

मुझे अपनी कस्टम क्लास सेट करना था जो UIViewController से प्राप्त होता है और UITableViewController में टेबल व्यू कंट्रोलर के रूप में कार्य करता है। मैंने सरल चाल बनाई और मेरी कस्टम क्लास विरासत को "UITableViewController" में बदल दिया और फिर मैं इस वर्ग को नियंत्रक को स्वतंत्र रूप से सेट कर सकता हूं। निश्चित रूप से सेट होने के बाद मैंने विरासत को वापस बदल दिया।

0

मैक ओएसएक्स ऐप पर एक्सकोड 7.1.1 के साथ मुझे एक ही समस्या थी। मैंने अन्य उत्तरों से सभी सुझावों की कोशिश की - कोई सफलता नहीं।

अंत में मैंने अपनी दृश्य नियंत्रक फ़ाइलों को हटा दिया और ब्रांड नए बनाए।
फिर यह अचानक काम किया ...

0

बस एक और संभावित समाधान जोड़ना जिससे मेरी समस्या को हल करने में मदद मिली क्योंकि दूसरों ने नहीं किया।

मैंने देखा कि कमांड + शिफ्ट + ओ का उपयोग करके मेरी कस्टम व्यू कंट्रोलर फ़ाइल की खोज की जा रही थी, लेकिन मैं नहीं देख सका कि फाइल कौन सा फ़ोल्डर था, इसलिए मैंने देखा कि किसी कारण से मेरी कस्टम क्लास गायब थी परियोजना से लेकिन अभी भी खोज में पाया जा रहा है।

मुझे बस परियोजनाओं को फिर से परियोजना में स्थानांतरित करना था और वोला!

आशा है कि यह भविष्य में किसी की मदद कर सकता है।

1

मैं इस मुद्दे पर चल रहा हूं और यहां पोस्ट किए गए सभी अन्य समाधानों का प्रयास किया है।

मेरे लिए काम करने वाली चीज कस्टम कक्षा बनाने के बाद सही सुपर क्लास सेट करना था। फिर आप कक्षा ड्रॉपडाउन से इसे ढूंढने और चुनने में सक्षम होना चाहिए।

उदा।

class LabsViewController: UITableViewController { 
संबंधित मुद्दे