यदि कोई मुख्य स्टोरीबोर्ड फ़ाइल स्विफ्ट का उपयोग करना चाहता है, तो एप्लिकेशन प्रतिनिधि को विंडो प्रॉपर्टी को लागू करना होगा


84

मैंने अभी एक ऐप विकसित किया है, लेकिन सिम्युलेटर में चलने पर डिबगर कंसोल कहता है:

यदि कोई मुख्य स्टोरीबोर्ड फ़ाइल का उपयोग करना चाहता है, तो एप्लिकेशन प्रतिनिधि को विंडो प्रॉपर्टी को लागू करना होगा।

मेरे पास एक ऐप प्रतिनिधि फ़ाइल है। संदेश का क्या मतलब है, और मैं अपने ऐप को कैसे काम कर सकता हूं?


उस प्रश्न को समझना बहुत कठिन है। क्या आप इसे सुधारने की कोशिश कर सकते हैं?
स्पष्ट करें

सुनिश्चित नहीं हैं कि आप क्या करने की कोशिश कर रहे हैं। लेकिन आपने जो प्रदान किया है, मैं उससे पूछ सकता हूं: क्या आपके पास var window: UIWindow?आपके AppDelegate वर्ग में संपत्ति है?
lchamp

यह त्रुटि संदेश है कि Xcode कंसोल में बाहर
फैलता है

अपने ऐपडेलगेट वर्ग की जाँच करें, यह UIResponder का उपवर्ग होना चाहिए। यदि आपका ऐप-प्रतिनिधि UIApplication का उपवर्ग है। कृपया इसे एक बार फिर से देखें।
आशिष

जवाबों:


164

सुनिश्चित करें कि आपके पास अपने AppDelegate वर्ग में निम्नलिखित संपत्ति की घोषणा है:

var window: UIWindow?

9
कैसे सिर्फ एक संपत्ति की घोषणा करने से समस्या हल हो गई! डेवलपर्स वास्तव में पागल हैं।
सज्जाद हिसैन खान

111

यदि आप iOS 13.0 से पहले अपना प्रोजेक्ट चलाते हैं, तो उस स्थिति में आपको समस्या का सामना करना पड़ेगा। IOS 13 और बाद में, ऐप पहले के संस्करणों की तुलना में अलग तरीके से लॉन्च होता है।

  • IOS 13 और बाद में, UISceneDelegateदृश्य-आधारित ऐप में जीवन-चक्र की घटनाओं का जवाब देने के लिए वस्तुओं का उपयोग करें

  • IOS 12 और इससे पहले के संस्करण में, UIApplicationDelegateजीवन-चक्र की घटनाओं पर प्रतिक्रिया करने के लिए ऑब्जेक्ट का उपयोग करें ।

जब आप iOS 12 और उससे पहले के ऐप को लॉन्च करते हैं तो UIApplicationMainक्लास को आपकी AppDelegateक्लास में एक विंडो प्रॉपर्टी की तरह उम्मीद होती SceneDelegateहै। यदि आप अपनी AppDelegateकक्षा में निम्न पंक्ति जोड़ते हैं तो आपकी समस्या हल हो जाएगी ।

var window: UIWindow?

उद्देश्य-सी के लिए

@property (strong, nonatomic) UIWindow *window;

आप यहां ऐप के जीवन चक्र को अधिक देख सकते हैं ।


1
मैंने यह लाइन AppDelegate क्लास में लिखी थी और मैंने Main Interface (Target -> General -> Main Interface = Main.storyboard) को बदल दिया था। फिर भी मुझे एक ही मिल रहा है। Xcode वर्जन 11.0 है। इसे ठीक करने के लिए कैसे
Madhu_Nani

क्या आप कृपया अपना क्रश लॉग साझा कर सकते हैं?
iMuzahid

इनपुट फ़ाइल 'CustomTabBar.swift' को निर्माण के दौरान संशोधित किया गया था आदेश CompileSwiftSource एक
नॉनज़ेरो

लेकिन आपका लॉग कहता है कि आपने अपना प्रोजेक्ट बनाते समय अपना कोड संशोधित किया है। अपने बिल्ड फ़ोल्डर (कमांड + शिफ + के) को साफ़ करें। आशा है कि आपकी समस्या फिर से हल हो जाएगी।
iMuzahid

हाँ यह हो गया है .. हो सकता है Xcode 11 डिवाइस में कुछ धीमा है। धन्यवाद
Mad_N_Nani

31

बस अगर किसी को यह फिर से आता है और ऑब्जेक्टिव-सी में प्रोग्रामिंग होती है, तो सुनिश्चित करें कि आपकी AppDelegate.hफ़ाइल में कोड की यह पंक्ति है :

@property (strong, nonatomic) UIWindow *window;

23

मुझे यह त्रुटि मिली है, जब मैंने XCode 11 में नई परियोजना बनाई थी। मैंने उपयोग नहीं किया है SwiftUI। यहाँ कदम हैं, मैंने इसे ठीक करने के लिए विचार किया है।

  1. से हटा दी गई Application Scene Manifestप्रविष्टिInfo.plist
  2. हटा दी गई SceneDelegate.swiftफ़ाइल
  3. AppDelegate.swiftकक्षा में दृश्य संबंधी सभी तरीकों को हटा दिया गया
  4. वर्ग var window: UIWindow?में संपत्ति जोड़ दीAppDelegate.swift

इन चरणों के बाद, मैं iOS 13 से पहले संस्करण पर ऐप चलाने में सक्षम हूं।

[संपादित करें]
अंत में, आपकी AppDelegate.swiftफ़ाइल को निम्न जैसा कुछ दिखना चाहिए।

import UIKit

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        // Override point for customization after application launch.
        return true
    }

}

2
यदि आप स्विफ्टयूआई का उपयोग नहीं कर रहे हैं तो यह मेरे लिए सही जवाब होना चाहिए। धन्यवाद @ सरवन
अभिजीत ब्रुमल

6

मेरे पास एक ही मुद्दा था, var window: UIWindow?जैसा कि डिबग एरर कहते हैं , बस जोड़ दें ।

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        // Override point for customization after application launch.
        return true
    }

3

Appdelegate फ़ाइल में निम्न विंडो घोषणा जोड़ें

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
    
    var window:UIWindow?
    ...

यदि आपके ऐप की Info.plist फ़ाइल में UIMainStoryboardFile कुंजी है, तो इस संपत्ति के कार्यान्वयन की आवश्यकता है। इस संश्लेषित संपत्ति का डिफ़ॉल्ट मान शून्य है, जो एप्लिकेशन को एक सामान्य UIWindow ऑब्जेक्ट बनाने और इसे संपत्ति में असाइन करने का कारण बनता है। यदि आप अपने ऐप के लिए एक कस्टम विंडो प्रदान करना चाहते हैं, तो आपको इस प्रॉपर्टी के गेट्टर मेथड को लागू करना होगा और अपने कस्टम विंडो को बनाने और वापस करने के लिए इसका उपयोग करना होगा।


2

आप अपने एप्लिकेशन प्रतिनिधि वर्ग की जांच कर सकते हैं:

import UIKit

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        // Override point for customization after application launch.
        return true
    }

    // MARK: UISceneSession Lifecycle

    @available(iOS 13.0, *)
    func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration {
        // Called when a new scene session is being created.
        // Use this method to select a configuration to create the new scene with.
        return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role)
    }

    @available(iOS 13.0, *)
    func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set<UISceneSession>) {
        // Called when the user discards a scene session.
        // If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions.
        // Use this method to release any resources that were specific to the discarded scenes, as they will not return.
    }
}

2

स्विफ्ट 5 और एक्सकोड 11

सुनिश्चित करें कि संपत्ति SceneDelegateशामिल UIWindowहै

class SceneDelegate: UIResponder, UIWindowSceneDelegate {

    var window: UIWindow?

    //...
}

निष्पक्ष रूप से - सिवाय मेरा और अभी भी त्रुटि है। मैं कम से कम लागू होने के बाद से इसे बढ़ा दूंगा।
StephenBoesch

0

बहुत पहले उत्तर दिया गया था, लेकिन ऊपर दिए गए प्रश्नों को समझने में मदद करने के लिए कि विंडो प्रॉपर्टी को जोड़ने से समस्या का समाधान क्यों होता है, ध्यान दें कि एप्लिकेशन प्रतिनिधि UIApplicationDelegateप्रोटोकॉल के अनुरूप है जो एक प्रॉपर्टी को परिभाषित करता है, @property (nullable, nonatomic, strong) UIWindow *window;जिसे वर्गों को निर्दिष्ट करने की आवश्यकता होती है window to use when presenting a storyboard। Xcode लॉग चेतावनी के कारण प्रदान करने में विफलता।


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.