एप्लिकेशन लॉन्च के अंत में एप्लिकेशन को रूट व्यू कंट्रोलर की अपेक्षा की जाती है


383

मुझे मेरे कंसोल में निम्न त्रुटि मिलती है:

एप्लिकेशन लॉन्च के अंत में एप्लिकेशन को रूट व्यू कंट्रोलर की अपेक्षा की जाती है

नीचे मेरी application:didFinishLaunchWithOptionsविधि है:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    // Set Background Color/Pattern
    self.window.backgroundColor = [UIColor blackColor];
    self.tabBarController.tabBar.backgroundColor = [UIColor clearColor];
    //self.window.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"testbg.png"]];

    // Set StatusBar Color
    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleBlackTranslucent];

    // Add the tab bar controller's current view as a subview of the window
    self.window.rootViewController = self.tabBarController;
    [self.window makeKeyAndVisible];
    return YES;
}

इंटरफ़ेस बिल्डर में, UITabBarController'' प्रतिनिधि को ऐप डेलिगेट के लिए जोड़ा जाता है।

किसी को भी इस मुद्दे को ठीक करने के लिए कैसे पता है?


5
असाइनमेंट करने से ठीक पहले आप एक NSLog of self.tabBarController करें। यदि नियंत्रक शून्य है, तो संदेश केवल ट्रिगर होता है। यदि यह शून्य है, और आपने यह सुनिश्चित कर लिया है कि आपके कनेक्शन सही हैं, तो कोड में कंट्रोलर को तत्काल करने का प्रयास करें।
फिफांज़

विंडो के प्रारंभ टिप्पणी करने की कोशिश .. इस जवाब की जांच stackoverflow.com/a/33958144/1293445
alabid मोहम्मद

जवाबों:


188

मुझे भी बिल्कुल यही समस्या है। अपने मुख्य सुबह की जाँच करें। अंतिम तर्क को उस वर्ग के नाम पर सेट किया जाना चाहिए जो UIApplicationDelegate प्रोटोकॉल को लागू करता है।

retVal = UIApplicationMain(argc, argv, nil, @"AppDelegate");

49
एक अन्य विकल्प यह सुनिश्चित करना है कि ऐप प्रतिनिधि वर्ग मुख्य और उपयोग में आयात किया गया है NSStringFromClass। इस तरह से Xcode अब main.m फाइल बनाता है। उदाहरण के लिए: #import "AppDelegate.hऔर फिरint retVal = UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
थानेदार

10
यह सुनिश्चित करें कि self.windowजैसे शुरू किया गया हैself.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
रैप्टर

1
मैंने उपरोक्त विकल्पों की कोशिश की, मेरे लिए काम नहीं किया। और मैं एक स्टोरीबोर्ड का उपयोग नहीं कर रहा हूं।
जौई

3
मेरे लिए कोई प्रभाव नहीं था, वही "अनुप्रयोग अपेक्षित हैं ..." संदेश परिवर्तन करने के बाद। समाधान OrdoDei का जवाब था (ऊपर या नीचे देखें) जो पूरी तरह से काम करता था।
एंड्रयू

1
यदि आप सिम्युलेटर में एक सफेद दृश्य देखते हैं, लेकिन एक स्टोरीबोर्ड से लेआउट को देखने की उम्मीद करते हैं, तो सुनिश्चित करें कि आपको रूट डेलिकेट फ़ंक्शन में कोड से छुटकारा मिल गया है "आवेदन didFinishLaunchingWithOptions ..." जो कि मुख्य रूप से सुबह में और केवल "वापसी" पर इंगित किया गया है हाँ;" इस में।
ओलिवियर डी जॉन्ज

435

AppDelegate में बदलें

 [window addSubview:[someController view]];

सेवा

  [self.window setRootViewController:someController];

इससे मेरे लिए संदेश निकल गया। यह अभी भी एक बाद की खिड़की नहीं दिखा रहा है लेकिन यह एक अलग मुद्दा हो सकता है। धन्यवाद।
जैज़मीन

3
यदि आप एक UINavigationController का उपयोग कर रहे हैं, तो आपको पहले [[UINavigationController] initWithRootViewController: tableViewController] और फिर विंडो के रूट व्यू कंट्रोलर को सेट करने के लिए [self.window setRootViewController: self.navigationController] के ऊपर कोड का उपयोग करना चाहिए
emdog4

Cocos2d की एक टिप्पणी है जो कहती है "// AddSubView iOS6 पर काम नहीं करता है" तो इसने मेरे लिए इसे ठीक कर दिया, जैसा कि मैं iOS 6 का उपयोग कर रहा हूं
Almo

1
addSubviewलाइन Xcode / iOS SDK के एक प्रारंभिक संस्करण पर प्रोजेक्ट टेम्पलेट का एक हिस्सा था। यदि ऐप बहुत पीछे चला जाता है, तो आपके पास यह तब भी हो सकता है जब आपने इसे नहीं लिखा था।
सेवा अलेक्सेयेव

नमस्ते, मैं यह मिटा रहा हूँ: - *** जोर विफलता - [UIApplication _runWithMainScene: transitionContext: पूर्णता:], /BuildRoot/Library/Caches/com.apple.xbs/Source/UIKit_Sim/UIKit-3505.16/6/6/6 3294 इसे हल करने के लिए कैसे
आकाश रघानी

70

पहली बार देखे गए नियंत्रक को बदलने की कोशिश करते समय मुझे वही त्रुटि हुई थी

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

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

- (void)viewDidLoad

सेवा

- (void)viewDidAppear:(BOOL)animated

और त्रुटि दिखाई देना बंद हो गई। मेरी समस्या विशेष रूप से एक UIAlertViewशो बनाने के कारण हुई ।

आपके मामले में मेरा सुझाव है कि आप tabBarController के सक्रिय दृश्य नियंत्रक में कोड की जांच करें (क्योंकि यह शायद उस दृश्य नियंत्रक में एक समस्या है)। यदि वह काम नहीं करता है, तो कोड के बजाय नायब फ़ाइल में प्रारंभिक सेटिंग्स सेट करने का प्रयास करें - या यदि आप इसे कोड में करना चाहते हैं, तो कोड को टैबबर्करोलर के सक्रिय दृश्य-नियंत्रक की उपयुक्त विधि में ले जाने का प्रयास करें।

सौभाग्य!


1
Warkst, उत्तर के लिए धन्यवाद। मेरे मामले में, मैं viewDidLoad:(झंडे को जोड़े बिना) कोड को स्थानांतरित नहीं कर सकता , और न ही मुझे ऐसा करना चाहिए। भले ही, सुझाव के लिए धन्यवाद!
ArtSabintsev

2
आज यह मिला और मुझे खुशी है कि मैंने वही मुद्दा - व्यूडलड में लॉन्च किया गया था। ViewDidAppear में बदल गया और ठीक काम करता है। यह सुनिश्चित नहीं है कि iOS5 में इसे बदलने से एप्पल को क्या अच्छा हासिल होता है।
ग्यूब्रशथ्रीपवुड

इस सुझाव के लिए धन्यवाद कि सतर्क दृश्य यह पैदा कर रहा था, वही समस्या मुझे भी हुई।
क्रिस

1
क्या आप हमें बता सकते हैं कि इसे निकालने के लिए आपको कौन सा कोड निकालना था? मैं viewDidLoadकई चीजों के लिए अपना उपयोग कर रहा हूं , सभी पहली बार सामान सेट करना, जैसे कि डेटा को जोड़ना UITableView। मैं इसे स्थानांतरित नहीं कर सकता viewDidAppear:क्योंकि मैं केवल यह चाहता हूं कि एक बार आग लग जाए।
जौई

1
समस्या गलत कार्य नहीं थी। समस्या यह थी कि आप अपने viewDidLoad फ़ंक्शन में [सुपर viewDidLoad] को कॉल करना भूल रहे थे, प्रभावी ढंग से निब लोड को मार रहे थे। मेरे साथ भी ऐसा ही हुआ है।
borrrden

47

मुझे यह तब मिला जब "खाली आवेदन" टेम्पलेट के साथ शुरू करना और फिर मैन्युअल रूप से एक एक्सआईबी जोड़ना। सनी द्वारा सुझाए गए मुख्य निब नाम को सेट करके मैंने इसे हल किया। इस परिदृश्य में अनुपलब्ध चरण निकाल रहा है

self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];

से

application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

चूंकि यह Xib फ़ाइल में बनाई गई आपकी विंडो के उदाहरण को ओवरराइट कर देगा। यह मान रहा है कि आपने एक ViewController बनाया है और इसे XIB फ़ाइल में अपनी विंडो और ऐप डेलिगेट के साथ वायर्ड किया है।


इसने मेरे लिए भी इसे ठीक कर दिया। मैं एक स्टोरीबोर्ड के साथ एक टैबेड एप्लिकेशन का उपयोग कर रहा था, जिसे मैं कोरडैटा को जोड़ने की कोशिश कर रहा था, और इस मुद्दे में भाग गया।
गीताकार

अगर मैं इसे जोड़ देता हूं तो मुझे दो चेतावनी मिलती है कि एप्लिकेशन विंडो के रूट व्यू कंट्रोलर होने की उम्मीद है !!
जॉर्ज आसडा

46

मेरे साथ ऐसा हुआ। संपादन .plist फ़ाइल द्वारा हल किया गया। मुख्य nib फ़ाइल आधार नाम निर्दिष्ट करें। (होना चाहिए MainWindow.xib)। आशा है कि यह मदद करेगा।

यहां छवि विवरण दर्ज करें


2
यह मेरे लिए काम किया! यह काम करता है जब आप Xcode 4.2 में एक खाली प्रोजेक्ट बनाते हैं, जहां कोई MainWindow मौजूद नहीं होगा और इस तरह से हमें इसे हुक करना होगा।
जिवांग्स

हमारे लिए समस्या तब हुई जब अनजाने में हमने 'Info.plist' फाइल से 'मेन निब फाइल बेस नेम' लाइन को हटा दिया। इस लाइन को डालने से समस्या फिर से ठीक हो गई।
rtovars

आप इसे प्रोजेक्ट प्रॉपर्टीज में भी सेट कर सकते हैं। प्रोजेक्ट, अपने लक्ष्य का चयन करें, आप इसे सारांश -> iPhone / iPad परिनियोजन जानकारी में संपादित कर सकते हैं।
डॉकमैन

यह वास्तव में मेरे लिए समस्या थी, जो कई मुद्दों को देखते हुए व्यूडीडलॉड और व्यूवलइपियर को रूटव्यूकंट्रोलर पर दो बार कॉल करने से संबंधित थी। मेरे मामले में इसे हटाने का हल था
Whyoz

27

मैं हाल ही में एक ही समस्या में चला गया, जब ios5 sdk के साथ एक परियोजना का निर्माण। पहले यह ठीक से निर्माण और चल रहा था, लेकिन इसके बाद त्रुटि दिखाई दी।
मेरे मामले में समाधान आसान नहीं था।
जो गायब था, वह यह था कि किसी तरह मेरे एप्लिकेशन लक्ष्य के सारांश टैब में मुख्य इंटरफ़ेस संपत्ति मिट गई। इसलिए मुझे इसे फिर से सेट करने की जरूरत थी।


यदि यह बिंदु नहीं है, और यदि tabBarController अभी भी शून्य है, तो आप हमेशा प्रोग्रामेटिक रूप से अपनी विंडो और रूट कंट्रोलर बना सकते हैं। एक गिरावट के रूप में मैंने अपनी परियोजना में निम्न कोड जोड़ा

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{ 
    if (!window && !navigationController) {
        NSLog(@"Window and navigation controller not loaded from nib. Will be created programatically.");
        self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
        UIViewController *viewController1, *viewController2;
        viewController1 = [[[FirstViewController alloc] initWithNibName:@"FirstViewController_iPhone" bundle:nil] autorelease];
        viewController2 = [[[SecondViewController alloc] initWithNibName:@"SecondViewController_iPhone" bundle:nil] autorelease];

        self.tabBarController = [[[UITabBarController alloc] init] autorelease];
        self.tabBarController.viewControllers = [NSArray arrayWithObjects:viewController1, viewController2, nil];
        self.window.rootViewController = self.tabBarController;

    }
    else {
        [window addSubview:[tabBarController view]];
    }
    [self.window makeKeyAndVisible];
    return YES;
}

यह तभी काम करेगा जब थानेदार का समाधान भी लागू हो।


24

मैंने iOS9 में अपग्रेड किया और इस त्रुटि को कहीं से भी प्राप्त करना शुरू कर दिया। मैं इसे ठीक करने में सक्षम था लेकिन नीचे दिए गए कोड को जोड़कर- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

NSArray *windows = [[UIApplication sharedApplication] windows];
for(UIWindow *window in windows) {
    if(window.rootViewController == nil){
        UIViewController* vc = [[UIViewController alloc]initWithNibName:nil bundle:nil];
        window.rootViewController = vc;
    }
}

मैं यह जानने के लिए उत्सुक हूं कि आपके ऐप में कितनी खिड़कियां हैं और यदि सभी में रूट व्यू कंट्रोलर है। धन्यवाद
DrAL3X

5
नोट : यह उत्तर एक वर्कअराउंड है और मूल कारण को ठीक नहीं करता है। देखें stackoverflow.com/a/33958144/1116061
लिपका

आप एक सच्चे नायक हैं!
user2161301

21

उपरोक्त सुझावों में से किसी ने भी मेरी समस्या का समाधान नहीं किया। मेरा यह था:

जोड़ें:

window.rootViewController = navigationController;

उपरांत:

[window addSubview:navigationController.view];

मेरी अपील में

- (void)applicationDidFinishLaunching:(UIApplication *)application {

20
  • अपनी निब फ़ाइल में अपना "विंडो" चुनें
  • "एट्रीब्यूट्स इंस्पेक्टर" चेक में "लॉन्च पर दिखाई दे रहा है"

छवि! []

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

यह केवल स्टोरीबोर्ड मोड में पाया जाता है, मुझे लगता है।
२१:०१ पर ArtSabintsev

नहींं, यह परियोजना नियमित नी मोड थी। यह Storyboard Mode से एक स्क्रीनशॉट है। "लॉन्च में दिखाई दे रहा है" बनाम "इनिशियल व्यू कंट्रोलर है"।
बेवॉच

3
यदि विंडो निब फ़ाइल मैन्युअल रूप से बनाई गई है, और "लॉन्च पर दिखाई दे रहा है" डिफ़ॉल्ट रूप से अनियंत्रित है, तो ऐप लॉन्च के बाद यह संदेश देगा, यह आपकी समस्या को ठीक करता है!
ZYiOS

ओह धन्यवाद!!! अंत में, इस कष्टप्रद चेतावनी का समाधान। यहां तक ​​कि अगर आपके पास makeKeyAndVisibleयह समस्या का समाधान नहीं है। केवल इसने मेरे लिए चेतावनी का समाधान किया। धन्यवाद!
tacos_tacos_tacos

'यह नियमित nib मोड में होता है - स्टोरीबोर्ड मोड नहीं' बहुत सही नहीं। मैं Storyboardभी उसी मुद्दे का सामना कर रहा हूं
thesummersign

19

iOS5 के लिए RootViewController कैसे जोड़ें

यदि आपका ऐप अब तक RootViewController का उपयोग नहीं करता है, तो फ़ाइल> नई> नई फ़ाइल दबाकर; UIViewController subclass इसका नाम चुनें RootViewController , उपयोगकर्ता इंटरफ़ेस के लिए XIB के साथ अनचेक करें (यह मानते हुए कि आपके पास पहले से ही एक है) और इस कोड को अपने AppDelegate में रखें :: didFinishLaunchingWithOptions

rootViewController = [[RootViewController alloc] init];
window.rootViewController = rootViewController;

सुनिश्चित करने के लिए - आपको RootViewController.h आयात करना होगा और चर बनाना होगा

यहाँ RootViewController और AppDelegate के बारे में एक अच्छा लेख है ,


Cupofcocoa.com लेख लिंक मृत है - किसी भी विचार अगर कहीं एक प्रति है?
रिओमायर

1
यह binpress.com में चला गया है, जवाब में लिंक को अपडेट किया
rémy

यह एक बड़ी कड़ी है। अच्छा पढ़िए और बताइए कि क्या हो रहा है। मुझे बस इस मुद्दे का सामना करना पड़ा और साथ ही एक पुरानी किताब (क्योंकि मैं ऑब्जेक्टिव-सी पहले सीखना चाहता हूं) पर नवीनतम XCode 7 पर कोड लिखना, जिसमें पुराने टेम्पलेट नहीं हैं।
इबर्लफ

11

मेरे पास भी यह त्रुटि थी, लेकिन पहले से सूचीबद्ध खदानों में से किसी भी उत्तर के विपरीत, क्योंकि मैंने अपने नए उत्पन्न नियंत्रक (xcode 4.2, ios5) में 'loadView' विधि को असंगत कर दिया था।

 //Implement loadView to create a view hierarchy programmatically, without using a nib.
- (void)loadView  
{
}

इसने मुझे यह भी बताया कि विधि प्रोग्राम को प्रोग्राम बनाने के लिए थी, लेकिन मैंने इसे मिस कर दिया क्योंकि यह अन्य तरीकों की तरह ही दिख रहा था जैसे कि व्यूडलड कि मैं सामान्य रूप से इसका उपयोग करता था, मैंने इसे नहीं पकड़ा।

बस उस विधि को हल करने के लिए यदि आप प्रोग्राम को दृश्य रूप से पदानुक्रम उर्फ ​​बनाने के लिए निब या स्टोरीबोर्ड का उपयोग नहीं कर रहे हैं।


मैं पुष्टि कर सकता हूं कि यह समस्या का कारण बन सकता है। मेरे पास TableView के बारे में ट्यूटोरियल का पालन करके एक ही स्थिति थी जहां वे प्रतिनिधियों को loadView में सेट करते हैं। उस कोड को viewDidLoad में ले जाने और loadView को हटाने के बाद, सब कुछ आवश्यकतानुसार काम करना शुरू कर दिया।
यूजेन

आप अभी भी लोड दृश्य का उपयोग कर सकते हैं लेकिन [सुपर लोड व्यू] जोड़ें; इसकी शुरुआत में।
हरमन क्लेकर

1
हम्म ... लोडव्यू के लिए प्रलेखन विशेष रूप से बताता है कि आपको सुपर विधि को कॉल नहीं करना चाहिए।
जोशुआ सुलिवन

मैं एक स्टोरीबोर्ड में डिफ़ॉल्ट UIViewController को ओवररोड करता हूं और पाया कि UIViewController उप-वर्ग बनाने के लिए टेम्प्लेट कोड में डिफ़ॉल्ट रूप से मेरे लिए यह लोड करने में सक्षम है ... इस मूर्खतापूर्ण चीज पर एक घंटे से अधिक समय बर्बाद किया। इसे पोस्ट करने के लिए धन्यवाद!
स्लीकेल

11

मुझे भी यह समस्याएँ हुईं। मुझे अपना प्रोजेक्ट xcode4.2.1 में मिला। मैंने वहाँ सभी टिप्पणियाँ पढ़ी हैं, लेकिन कोई भी मेरे लिए अच्छा नहीं है। थोड़ी देर के बाद, मुझे लगता है कि मैं कोड का एक टुकड़ा टिप्पणी की।

//self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];

तब मैंने इसे अनसुना कर दिया। मेरे लिए सब कुछ ठीक है। आशा है कि यह आप लोगों के लिए उपयोगी होगा।


कोड: "self.window = [[UIWindow आबंटित] initWithFrame: [[UIScreen मेनस्क्रीन] सीमा]];" त्रुटि हुई, इसलिए मैंने इसे हटा दिया।
ग्रिगोरि ए।

11

सुनिश्चित करें कि आपके आवेदन प्रतिनिधि में यह फ़ंक्शन है।

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:    (NSDictionary *)launchOptions {
   return YES;
}

सुनिश्चित करें कि FFishishLaunchingWithOptions YES देता है। यदि आप 'रिटर्न YES' लाइन को हटाने के लिए हुए हैं, तो यह त्रुटि का कारण होगा। यह त्रुटि स्टोरीबोर्ड उपयोगकर्ताओं के साथ विशेष रूप से सामान्य हो सकती है।


बहुत से कुदोस, यही मैं चाहता था (स्टोरीबोर्ड के साथ खाली परियोजना)
श्टिरिलिक

2
मुझे भी। धन्यवाद। यदि आप रिक्त अनुप्रयोग बनाते हैं, तो यह विधि विंडो के मैनुअल निर्माण से भर जाती है। इसे केवल यस वापस करने के लिए बदला जाना चाहिए। Thx
बेन जी

10

मेरे प्रथम दृश्य के साथ MenuViewControllerमैंने जोड़ा:

MenuViewController *menuViewController = [[MenuViewController alloc]init];
self.window.rootViewController = menuViewController;

App प्रतिनिधि विधि पर:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
}

वह काम किया।


10

IOS 5.0 या इसके आस-पास एक मामूली बदलाव था, आपको रूट व्यू कंट्रोलर की आवश्यकता थी। यदि आपका कोड पुराने नमूना कोड, जैसे GLES2Sample पर आधारित है , तो उन कोड नमूनों में कोई रूट दृश्य नियंत्रक नहीं बनाया गया था।

ठीक करने के लिए (वह GLES2Sample, उदाहरण के लिए), ठीक है applicationDidFinishLaunching, मैं एक रूट व्यू कंट्रोलर बनाता हूं और इसके लिए अपना glView संलग्न करता हूं।

- (void) applicationDidFinishLaunching:(UIApplication *)application
{
  // To make the 'Application windows are expected
  // to have a root view controller
  // at the end of application launch' warning go away,
  // you should have a rootviewcontroller,
  // but this app doesn't have one at all.
  window.rootViewController = [[UIViewController alloc] init];  // MAKE ONE
  window.rootViewController.view = glView; // MUST SET THIS UP OTHERWISE
  // THE ROOTVIEWCONTROLLER SEEMS TO INTERCEPT TOUCH EVENTS
}

यह चेतावनी को दूर कर देता है, और वास्तव में आपके ऐप को अन्यथा प्रभावित नहीं करता है।


9

इसके बजाय इंटरफ़ेस बिल्डर में दृश्य को रूट करने के लिए टैब बार नियंत्रक के IBOutlet को कनेक्ट करने का प्रयास करें

self.window.rootViewController = self.tabBarController;

लेकिन वास्तव में मैंने ऐसी त्रुटि पहले नहीं देखी है।


8

मैंने निम्नलिखित को करके समस्या का हल किया (ऊपर दिए गए अन्य समाधानों में से कोई भी नहीं):

"मेन इंटरफेस" से जुड़े पुलडाउन मेनू से एक और प्रविष्टि का चयन करें और फिर "मेनविंडो" को फिर से बनाएँ।

यहां छवि विवरण दर्ज करें


8

मैं एक ही मुद्दे पर आया था लेकिन मैं उपयोग कर रहा था storyboard

storyboard InitialViewControllerमेरी खिड़की के लिए मुझे सौंपना rootViewController

में

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
...
UIStoryboard *stb = [UIStoryboard storyboardWithName:@"myStoryboard" bundle:nil];
self.window.rootViewController = [stb instantiateInitialViewController];
return YES;
}

और इस मुद्दे को हल किया।


7

मुझे Xcode 4.3 में अपग्रेड करने के बाद ही यह समस्या आनी शुरू हो गई, और केवल स्क्रैच से एक प्रोजेक्ट शुरू करने पर (यानी खाली प्रोजेक्ट बनाएं, फिर एक UIViewController बनाएं, और फिर एक अलग nib फ़ाइल बनाएं)।

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

मैंने Xcode के माध्यम से एक सिंगल व्यू टेम्प्लेट बनाया और अपने कोड से इसकी तुलना की और फाइनली समस्या पाई!

Xcode 4.3 डिफ़ॉल्ट विधि से जोड़ना प्रतीत होता है - (शून्य) loadView; नियंत्रक कार्यान्वयन अनुभाग देखें। इसके अंदर की टिप्पणियों को ध्यान से पढ़ने के बाद, यह स्पष्ट हो गया कि समस्या क्या थी। यदि प्रोग्राम दृश्य रूप से लोड कर रहा है, तो लोड लोड विधि को ओवरराइड करने के लिए इंगित की गई टिप्पणी (और मैं paraphrasing है), अन्यथा निब का उपयोग करते हुए लोड व्यू को ओवरराइड नहीं करना चाहिए। इस पद्धति के अंदर और कुछ नहीं था, इसलिए प्रभाव में मैं इस विधि को ओवरराइड कर रहा था (और कुछ भी नहीं कर रहा था) एक नीब फ़ाइल का उपयोग करके, जिसने त्रुटि दी।

समाधान को या तो पूरी तरह से लोडव्यू पद्धति को कार्यान्वयन अनुभाग से हटा देना था, या [सुपर लोड व्यू] जोड़कर मूल विधि को कॉल करना था।

इसे हटाना सबसे अच्छा होगा यदि NIB फ़ाइल का उपयोग किसी अन्य कोड को जोड़ने से होगा जो प्रभाव में आ जाएगा।


यह वास्तव में मेरी समस्या थी! मैंने एक लोड दृश्य कार्यान्वयन जोड़ा था लेकिन सुपर कॉल नहीं किया था। क्या कुछ अन्य कोड परिवर्तन हुए, याद नहीं कि मैंने क्या किया था। मुझे 2 घंटे के लिए अटक गया क्योंकि यह परिवर्तन इतना सहज लग रहा था।
LearnCocos2D

6

मुझे लॉग में यही त्रुटि संदेश था। मेरे पास एक UIAlertView आवेदन में पॉप अप था: didFinishLaunchingWithOptions। मैंने रूट व्यू कंट्रोलर को लोडिंग को पूरा करने के लिए समय की अनुमति देने के लिए अलर्टव्यू पर कॉल में देरी करके इसे हल किया।

आवेदन में: didFishishLaunchingWithOptions:

[self performSelector:@selector(callPopUp) withObject:nil afterDelay:1.0];

जो 1 सेकंड के बाद कॉल करता है:

- (void)callPopUp
{
    // call UIAlertView
}

धन्यवाद, इससे मेरी समस्या हल हो गई। विंडो लोड होने के बाद आपको अलर्ट दिखाने का इंतजार करना चाहिए। मेरे मामले में मैंने अभी किया [अलर्ट performSelector: @selector (show) withObject: nil afterDelay: 1.0];
डीपविन्टर

6

मुझे भी यही समस्या थी। यदि आप विंडो-आधारित एप्लिकेशन "स्क्रैच" से बना रहे हैं जैसा कि मैं था, तो आपको निम्नलिखित कार्य करने होंगे: (ध्यान दें, ये Xcode 4.2 के लिए चरण हैं।)

0. सुनिश्चित करें कि आपका एप्लिकेशन प्रतिनिधि UIApplicationDelegate प्रोटोकॉल के अनुरूप है।

उदाहरण के लिए, मान लीजिए कि हमारे प्रतिनिधि को MyAppDelegate कहा जाता है। MyAppDelegate.h में, हमें कुछ इस तरह से होना चाहिए:

@interface MyAppDelegate : 
    NSObject <UIApplicationDelegate> // etc...

1. मुख्य प्रतिनिधि में आवेदन प्रतिनिधि निर्दिष्ट करें

उदाहरण के लिए,

#import "MyAppDelegate.h"

int main(int argc, char *argv[])
{
  @autoreleasepool {
    return UIApplicationMain(argc, argv,
      nil, NSStringFromClass([MyAppDelegate class]));
  }
}

2. एक मुख्य विंडो इंटरफ़ेस फ़ाइल बनाएँ।

ऐसा करने के लिए, अपने प्रोजेक्ट पर राइट-क्लिक करें और नई फ़ाइल चुनें। वहां से, iOS -> उपयोगकर्ता इंटरफ़ेस अनुभाग से विंडो चुनें।

फ़ाइल को अपने प्रोजेक्ट में जोड़ने के बाद, प्रोजेक्ट के सारांश (प्रोजेक्ट पर बाएं क्लिक करें; सारांश पर क्लिक करें।) के तहत iPhone / iPod परिनियोजन जानकारी (और यदि आपको पसंद है तो संबंधित iPad अनुभाग) और "में अपनी नई इंटरफ़ेस फ़ाइल का चयन करें। मुख्य इंटरफ़ेस "कॉम्बो बॉक्स।

3. यह सब इंटरफ़ेस संपादक में हुक

इंटरफ़ेस संपादक को लाने के लिए फ़ाइलों की सूची में अपनी इंटरफ़ेस फ़ाइल चुनें।

सुनिश्चित करें कि उपयोगिताएँ फलक खुला है।

यूटिलिटीज फलक में ऑब्जेक्ट लिस्ट में से किसी ऑब्जेक्ट को खींचकर एक नया ऑब्जेक्ट जोड़ें, जो आपके विंडो ऑब्जेक्ट के नीचे स्पेस से ऊपर हो। वस्तु का चयन करें। यूटिलिटीज फलक में आइडेंटिटी इंस्पेक्टर पर क्लिक करें। इस उदाहरण में क्लास को एप्लिकेशन के प्रतिनिधि (MyAppDelegate) में बदलें।

MyAppDelegate के लिए कनेक्शन निरीक्षक को लाएँ। इंटरफ़ेस के फ़ाइल में पहले से मौजूद विंडो से विंडो आउटलेट कनेक्ट करें।

बाईं ओर फ़ाइल के स्वामी पर क्लिक करें, और फिर यूटिलिटीज़ फलक में पहचान निरीक्षक पर क्लिक करें। कक्षा को बदलेंUIApplication

फ़ाइल के मालिक के लिए कनेक्शन निरीक्षक को ले आओ। प्रतिनिधि को MyAppDelegate ऑब्जेक्ट से कनेक्ट करें।

4. अंत में, और बहुत महत्वपूर्ण बात, इंटरफ़ेस फ़ाइल में विंडो ऑब्जेक्ट पर क्लिक करें। गुण निरीक्षक खोलें। सुनिश्चित करें कि "लॉन्च पर दर्शनीय" चेक किया गया है।

यह सब मुझे मेरे लिए काम करने के लिए करना था। सौभाग्य!


6

यदि आप MTStatusBarOverlay का उपयोग करते हैं, तो आपको यह त्रुटि मिलेगी।

MTStatusBarOverlay एक अतिरिक्त विंडो बनाता है ([[UIApplication sharedApplication] विंडोज़) जिसमें रूट कंट्रोलर नहीं है।

यह एक समस्या का कारण नहीं लगता है।


क्या अापको उस बारे में पूर्ण विशवास है? क्या आपने इसका परीक्षण किया है?
सेर्गेई ग्रिसकोव

मुझे यकीन है कि यह एक विंडो बनाता है और मुझे यकीन है कि यह मेरे ऐप्स में कोई समस्या नहीं पैदा करता है।
कन्फ्यूज्ड वोरलॉन

आप इसे ठीक करने के लिए MTStatusBarOverlay पर एक डमी वीसी सेट कर सकते हैं।
वेस्ले

यह वास्तव में मेरी समस्या थी। मेरे पास एक खिड़की के साथ एक समान प्रकार का सेटअप था जिसे एक अधिसूचना बार के लिए जोड़ा गया था, और एक बार मैंने टिप्पणी की कि त्रुटि गायब हो गई! यह इस मामले में हानिरहित प्रतीत होता है।
हारून ज़िनमैन

6

XCode 4.6.3 और iOS 6.1 का उपयोग करके स्टोरीबोर्ड के साथ मेरे UI को बदलने के बाद एक ही त्रुटि प्राप्त की

AppDelegate में didFinishLaucnhingWithOptions से सभी कोड को साफ़ करके इसे हल किया

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    return YES;
}

5

OrdoDei ने एक सही और मूल्यवान उत्तर दिया। मैं इस उत्तर को केवल एक didFinishLaunchingWithOptionsविधि का उदाहरण देने के लिए जोड़ रहा हूं जो उनके उत्तर के साथ-साथ नेविगेशन नियंत्रक के बारे में दूसरों की टिप्पणियों के लिए लेखांकन का उपयोग करता है।

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

    // Override point for customization after application launch.

    // Instantiate the main menu view controller (UITableView with menu items).
    // Pass that view controller to the nav controller as the root of the nav stack.
    // This nav stack drives our *entire* app.
    UIViewController *viewController = [[XMMainMenuTableViewController alloc] init];
    self.navigationController = [[UINavigationController alloc] initWithRootViewController:viewController];

    // Instantiate the app's window. Then get the nav controller's view into that window, and onto the screen.
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    // [self.window addSubview:self.navigationController.view];
    // The disabled line above was replaced by line below. Fixed Apple's complaint in log: Application windows are expected to have a root view controller at the end of application launch
    [self.window setRootViewController:self.navigationController];
    self.window.backgroundColor = [UIColor whiteColor];
    [self.window makeKeyAndVisible];
    return YES;
}

4

यह मेरे लिए हुआ क्योंकि मैंने अनजाने में टिप्पणी की थी:

[self.window makeKeyAndVisible];

से

- (BOOL)application:(UIApplication*) didFinishLaunchingWithOptions:(NSDictionary*)

4

मैं xcode की सारांश स्क्रीन पर प्रारंभिक दृश्य नियंत्रक सेट करने में सक्षम था।

बाएं हाथ की फ़ाइल एक्सप्लोरर में शीर्ष सबसे प्रोजेक्ट नाम पर क्लिक करें (इसमें थोड़ा खाका आइकन होना चाहिए)। केंद्र कॉलम में 'TARGETS' के तहत अपने प्रोजेक्ट के नाम पर क्लिक करें, (इसके बगल में थोड़ा पेंसिल 'A' आइकन होना चाहिए)। 'IPhone / iPod परिनियोजन जानकारी' के अंतर्गत देखें और 'Main Interface' देखें। आपको ड्रॉप डाउन से एक विकल्प का चयन करने में सक्षम होना चाहिए।


4

"थानेदार" उत्तर के ऊपर, यह सही है (UIApplicationMain का चौथा पैरामीटर मुख्य नियंत्रक का नाम होना चाहिए), मैं कुछ टिप्पणियां जोड़ता हूं।

मैंने हाल ही में मुख्य रूप से विंडो बनाने के लिए MainWindow.xib का उपयोग करने से मेरा एक ऐप का 'मॉडल' बदल दिया है। ऐप ने एक पुराने टेम्प्लेट का उपयोग किया जो कि मेनविंडो को स्वचालित रूप से बनाता है। चूंकि मैं iPhone 5 के लिए एक अलग नियंत्रक दृश्य XIB का समर्थन करना चाहता था, इसलिए एप्लिकेशन डेलिगेट बनाए जाने पर प्रोग्रामिक रूप से सही XIB चुनना आसान होता है। मैंने प्रोजेक्ट से MainWindow.xib को भी हटा दिया।

समस्या यह थी, मैं UIApplication main में चौथा पैरामीटर भरना भूल गया था और मैं प्रोजेक्ट सारांश में "Main Interface" से मुख्य Mainindow को प्राप्त करना भूल गया।

इससे BIG समस्या उत्पन्न हुई: इसने विकास उपकरणों पर हानिरहित चेतावनी "अनुप्रयोगों की अपेक्षा की जाती है ..." का प्रतिपादन किया, लेकिन जब यह App Store में गया, तो यह उपभोक्ता फोन पर टूट गया, दुर्घटनाग्रस्त हो गया क्योंकि MainWindow अब बंडल में नहीं था! मुझे बगफिक्स के लिए एक समीक्षित समीक्षा का अनुरोध करना था।

एक और सहानुभूति यह है कि कभी-कभी एक खाली ब्लॉक की तरह एक सफेद ब्लॉक, कभी-कभी सेटिंग और बदले ऐप को अग्रभूमि में डालते समय दिखाई देता था। IPhone 5 में यह स्पष्ट था कि यह 320x480 ब्लॉक था। शायद पुराने आकार का उपयोग करके गायब मेनविन्डो को विकास मोड में बनाया जा रहा था। मुझे यह बग तब मिला था जब दुर्घटना की पहली रिपोर्ट इनबॉक्स तक पहुंच गई थी।

XCode के बजाय ऐप स्टोर से ऐप इंस्टॉल करने से पता चला कि ऐप वास्तव में क्रैश हो गया था, और MainWindow समस्या स्वयं लॉग ऑन पर प्रकट हुई थी, इसलिए मैं देख सकता था कि यह डिवाइसेस + IOS संस्करणों के कुछ विशेष संयोजन नहीं थे।


4

माइक फ्लिन के जवाब में जोड़ने के लिए, Xcode 7 में अपग्रेड करने और iOS 9 डिवाइस पर अपना ऐप चलाने के लिए, मैंने इसे अपने साथ जोड़ा (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

// Hide any window that isn't the main window
NSArray *windows = [[UIApplication sharedApplication] windows];
for (UIWindow *window in windows) {
    if (window != self.window) {
        window.hidden = YES;
    }
}

मैं यह जानने के लिए उत्सुक हूं कि आपके ऐप में कितनी खिड़कियां हैं और यदि सभी में रूट व्यू कंट्रोलर है। धन्यवाद
DrAL3X

3

यह समस्या तब होती है जब आपके पास इंटरफ़ेस बिल्डर सही तरीके से सेट नहीं होता है।

अपने ऐप डेलीगेट की विंडो सुनिश्चित करें और व्यूकंट्रोलर के आउटलेट हुक किए गए हैं:

अपने MainWindow.xib में, नियंत्रण रखें, App प्रतिनिधि पर क्लिक करें और विंडो ऑब्जेक्ट पर खींचें। विंडो का चयन करें। नियंत्रण रखें और App प्रतिनिधि को फिर से चुनें, अपने रूट व्यू कंट्रोलर पर खींचें और viewController चुनें।


3

यह त्रुटि तब भी दिखाई देती है जब फ़ाइल के मालिक MainWindow.xib को गलत तरीके से सेट किया जाता है।

फ़ाइल का मालिक UIApplication है
-> विंडो से जुड़े विंडो आउटलेट के साथ ऐप प्रतिनिधि वर्ग की सम्मिलित वस्तु


मैंने मैन्युअल रूप से एक xib फ़ाइल बनाई और यह त्रुटि प्राप्त करना शुरू कर दिया। बहुत बहुत धन्यवाद!
रॉमेन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.