2015-04-13 8 views
5

Mam ten kod var window = UIWindow() w moim AppDelegate. Moja aplikacja działa dobrze wcześniej. Po zaktualizowałem moją XCode do 6,3, już nie mogę uruchomić moją aplikację na iOS w symulatorze jak ja dostaję błądrodzaj "okna" ma inną opcję niż wymagana przez protokół "uiapplicationdelegate" po aktualizacji XCode do 6.3

type of 'window' has different optionality than required by protocol 'uiapplicationdelegate'

+0

ponieważ jej teraz: Okno var: UIWindow? Ale powinieneś przekonwertować na najnowszą składnię Swift za pomocą Edycja -> Konwertuj -> Na najnowszą składnię Swift, aby uniknąć tego typu błędów. –

+0

Podany kod był domyślny po utworzeniu aplikacji w Swift. Zmieniłem kod na powyższy, ponieważ pojawia się błąd 'błąd krytyczny: nieoczekiwanie znaleziono zero podczas rozpakowywania wartości Opcjonalne' i użyto' okna! (np. window! .frame = ..' –

+0

Gdzie użyłeś tego kodu, tego okna! .frame .... w AppDelegate? –

Odpowiedz

0

Jeśli cmd kliknięcie na słowie UIApplicationDelegate w definicji klasy kodzie, będziesz otwórz definicję protokołu. Podejrzewam, że używasz tego połączenia:

func application(application: UIApplication, supportedInterfaceOrientationsForWindow window: UIWindow?) {...} 

i które mogły ulec zmianie w Swift 1.2, ale nie wydaje się być szeroko udokumentowane. Jeśli zamiast tego napiszesz:

func application(application: UIApplication, supportedInterfaceOrientationsForWindow window: UIWindow) {...} 
to otrzymasz komunikat o błędzie, który zgłosisz.

Ten konkretny problem nie został rozwiązany przez zautomatyzowany program, o którym wspomina Daniel Nagy - wpadłem na podobny problem.

Jeśli masz tę opcjonalną funkcję, po prostu dodaj ? po UIWindow w definicji funkcji.

1

Dziękuję za wszystkie uwagi. Nie jestem do końca pewien, dlaczego moja deklaracja o kodzie window nagle przestała działać. Aby to naprawić, użyłem odpowiedź stąd: https://stackoverflow.com/a/25482567/2445717

ja przywrócić declarion okna do domyślnego: var window: UIWindow?

a następnie wykorzystywane poniżej kod didFinishLaunchingWithOptions

window = UIWindow(frame: UIScreen.mainScreen().bounds) 
    if let window = window { 
     window.backgroundColor = UIColor.whiteColor() 
     window.rootViewController = ViewController() 
     window.makeKeyAndVisible() 
    } 
0

W Swift 2, AppDelegate mają:

var window: UIWindow? 

zamiast

var window: UIWindow 

dlatego powinna ona być zerowa

Można użyć leniwy var aby kod po prostu

lazy var window: UIWindow? = { 
    let win = UIWindow(frame: UIScreen.mainScreen().bounds) 
    win.backgroundColor = UIColor.whiteColor() 
    win.rootViewController = UINavigationController(rootViewController: self.authViewController) 
    return win 
}() 
Powiązane problemy