2017-05-31 45 views
1

我已經將一個空項目從ObjC移植到了Swift(我知道我可以用swift開始,但爲了這個問題,讓我們假設這不是一個選項)將項目從ObjC移植到Swift後不開始應用程序

我已經刪除ObjC類,包括main文件,並通過簡單的AppDelegate.swiftViewController.swift取而代之:

AppDelegate.swift:

import UIKit 

@UIApplicationMain 
class AppDelegate: UIResponder, UIApplicationDelegate { 

    func application(
     _ application: UIApplication, 
     didFinishLaunchingWithOptions 
     launchOptions: [UIApplicationLaunchOptionsKey : Any]? = nil) -> Bool { 
     return true 
    } 
} 

ViewController.swift:

import UIKit 

class ViewController: UIViewController { 
    override func viewDidLoad() { 
    super.viewDidLoad() 
    print("ViewController") 
    } 
} 

我確定我的初始故事板使用了ViewController類型的UIViewController。

事情編譯得很好,但應用程序沒有啓動,AppDelegate didFinishLaunchingWithOptions函數未被調用,並且沒有視圖可見。我想我需要告訴Xcode新的入口點是AppDelegate.swift,我希望@UIApplicationMain正在做。

對於更多的上下文,我設置了一個需要用目標C編寫的窗口,但我希望演示應用程序能夠快速啓動。我找不到通過cocoapods自動執行此操作的選項,因此我將所有內容都設置爲了客觀的C,並且我試圖將該演示應用程序移至快捷方式。我沒有手動更改任何構建設置。

+0

是否已進行了在建的任何變化設置? –

+0

nop,除非通過添加/刪除文件自動生成。 – Guig

+0

要運行你的代碼,你的應用應該有Swift編譯器。檢查構建設置 –

回答

0

我結束了清洗構建並添加一個窗口屬性的應用程序代理解決問題...

的AppDelegate中需要有一個var window: UIWindow?財產。這是目前的C版本,我愚蠢地忘了把它放在迅捷版本。不知何故,在清理構建文件夾後,Xcode開始抱怨沒有這樣的屬性,我把它放回去。

window這個屬性應該在啓動時設置,故事板。這雖然部分並沒有在工作正常的目標C版本,這是sinply:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    // Override point for customization after application launch. 
    return YES; 
} 

所以我現在有:

// AppDelegate.swift 
import UIKit 

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

    func application(
    _ application: UIApplication, 
    didFinishLaunchingWithOptions 
    launchOptions: [UIApplicationLaunchOptionsKey : Any]? = nil) -> Bool { 

    window = UIWindow(frame: UIScreen.main.bounds) 
    window?.rootViewController = UIStoryboard.init(name: "Main", bundle: nil).instantiateInitialViewController() 
    window?.makeKeyAndVisible() 

    return true 
    } 
} 

和工作

相關問題