Uygulama temsilcisi, bir ana film şeridi dosyası swift kullanmak istiyorsa pencere özelliğini uygulamalıdır.


86

Az önce bir uygulama geliştirdim, ancak simülatörde çalışırken hata ayıklayıcı konsolu şunu söylüyor:

Uygulama temsilcisi, bir ana film şeridi dosyası kullanmak istiyorsa pencere özelliğini uygulamalıdır.

Bir uygulama temsilcisi dosyam var. Mesaj ne anlama geliyor ve uygulamamı nasıl çalıştırabilirim?


Bu soruyu anlamak çok zor. Onu geliştirmeyi deneyebilir misin?
Clearlight

Ne yapmaya çalıştığından emin değilim. Ancak sağladığınızdan şunu sorabilirim: var window: UIWindow?AppDelegate sınıfınızda mülk var mıydı ?
lchamp

Bu,
Xcode'un

AppDelegate sınıfınızı kontrol edin, UIResponder'ın alt sınıfı olmalıdır. Uygulama temsilciniz UIApplication'ın alt sınıfıysa. Lütfen bir kez daha kontrol edin.
Aashish1aug

Yanıtlar:


165

AppDelegate sınıfınızda aşağıdaki özellik bildirimine sahip olduğunuzdan emin olun:

var window: UIWindow?

9
Nasıl olur da bir mülkün ilan edilmesi sorunu çözdü! Geliştiriciler gerçekten deli.
Sazzad Hissain Khan

113

Projenizi iOS 13.0'dan daha önce çalıştırırsanız, bu durumda sorunla karşılaşırsınız. İOS 13 ve sonraki sürümler nedeniyle, uygulama önceki sürümlerden farklı şekilde başlar.

  • İOS 13 ve sonraki sürümlerde, UISceneDelegatesahne tabanlı bir uygulamada yaşam döngüsü olaylarına yanıt vermek için nesneleri kullanın

  • İOS 12 ve önceki sürümlerde, UIApplicationDelegateyaşam döngüsü olaylarına yanıt vermek için nesneyi kullanın.

Uygulamayı iOS 12 ve öncesinde başlattığınızda, sınıfınız da olduğu gibi sınıfınızda UIApplicationMainbir pencere özelliği bekler . Yani aşağıdaki satırı sınıfınıza eklerseniz probleminiz çözülecektir .AppDelegateSceneDelegateAppDelegate

var window: UIWindow?

Objective-C için

@property (strong, nonatomic) UIWindow *window;

Daha fazlasını burada Uygulamanın Yaşam Döngüsü bulabilirsiniz .


1
Bu satırı AppDelegate sınıfında yazdım ve Ana Arayüzü değiştirdim (Hedef -> Genel -> Ana Arayüz = Main.storyboard. Yine de aynı .Xcode sürümü 11.0.
Nasıl

Lütfen aşk günlüğünüzü paylaşır mısınız?
iMuzahid

'CustomTabBar.swift' giriş dosyası derleme sırasında değiştirildi Command CompileSwiftSources sıfırdan farklı bir çıkış koduyla başarısız oldu
Madhu_Nani

Ancak günlüğünüz, projenizi oluştururken kodunuzu değiştirdiğinizi söylüyor. Derleme klasörünüzü temizleyin (Command + Shif + K). Umarım sorununuz çözülür.
iMuzahid

Evet bitti .. Olabilir Xcode 11 cihazda biraz yavaş.
Teşekkürler

31

Herhangi biri bununla tekrar karşılaşırsa ve Objective-C'de programlama yapıyorsa, AppDelegate.hdosyanızda şu kod satırının bulunduğundan emin olun :

@property (strong, nonatomic) UIWindow *window;

23

XCode 11'de yeni proje oluşturduğumda bu hatayı aldım. Kullanmadım SwiftUI. İşte adımlar, bunu düzeltmeyi düşündüğüm adımlar.

  1. Silinen Application Scene Manifestgelen girişInfo.plist
  2. SceneDelegate.swiftDosya silindi
  3. AppDelegate.swiftSınıftaki sahneyle ilgili tüm yöntemler silindi
  4. sınıfa eklenen var window: UIWindow?özellikAppDelegate.swift

Bu adımlardan sonra, uygulamayı iOS 13'ten önceki sürümlerde çalıştırabiliyorum.

[DÜZENLE]
Son olarak, AppDelegate.swiftdosyanız aşağıdaki gibi görünmelidir.

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
SwiftUI kullanmıyorsanız, bu benim için işe yarayan doğru cevap olmalıdır. Teşekkürler @Sarvan
Abhijith Brumal

6

Aynı sorunu yaşadım, sadece var window: UIWindow?hata ayıklama hatasının dediği gibi ekleyin .

@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 dosyasına aşağıdaki pencere bildirimini ekleyin

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

Uygulamanızın Info.plist dosyası UIMainStoryboardFile anahtarını içeriyorsa bu özelliğin uygulanması gerekir. Bu sentezlenmiş özelliğin varsayılan değeri nil'dir ve bu, uygulamanın genel bir UIWindow nesnesi oluşturmasına ve özelliğe atamasına neden olur. Uygulamanız için özel bir pencere sağlamak istiyorsanız, bu mülkün alıcı yöntemini uygulamanız ve özel pencerenizi oluşturmak ve geri döndürmek için bunu kullanmanız gerekir.


2

Uygulamanızın temsilcisi sınıfını kontrol edebilirsiniz:

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

Swift 5 ve Xcode 11

Özellik SceneDelegateiçerdiğinden emin olunUIWindow

class SceneDelegate: UIResponder, UIWindowSceneDelegate {

    var window: UIWindow?

    //...
}

Yeterince adil - benimki hariç ve hala hata yapıyor. En azından uygulanabilir olduğu için oy vereceğim.
StephenBoesch

0

Uzun zaman önce cevaplandı, ancak pencere özelliğinin neden basitçe eklenmesinin sorunu çözdüğüne ilişkin yukarıdaki soruları anlamaya yardımcı olmak için, uygulama temsilcisinin UIApplicationDelegatebir özelliği tanımlayan protokole uyduğunu ve @property (nullable, nonatomic, strong) UIWindow *window;sınıfların window to use when presenting a storyboard. Bunun sağlanamaması Xcode günlük uyarılarına neden oluyor.


0

Info.plist Uygulama Sahnesi Bildirimi> Birden Çok Pencereyi Etkinleştir> yanlış ayarında. Bu benim için sorunu çözdü.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.