gpt4 book ai didi

ios - 将项目从 ObjC 移植到 Swift 后应用程序无法启动

转载 作者:行者123 更新时间:2023-11-28 08:08:59 25 4
gpt4 key购买 nike

我已经将一个空项目从 ObjC 移植到 Swift(我知道我可以从 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")
}
}

并且我确保我的初始 Storyboard使用 ViewController 类型的 UIViewController。

编译正常,但应用程序未启动,未调用 AppDelegate didFinishLaunchingWithOptions 函数,并且没有 View 可见。我想我需要以某种方式告诉 Xcode 新的入口点是 AppDelegate.swift,我希望 @UIApplicationMain 正在这样做。

为了了解更多上下文,我正在设置一个需要用 objective-c 编写的 pod,但我希望演示应用程序快速运行。我找不到通过 cocoapods 自动执行此操作的选项,因此我将所有内容都设置为 objective-c ,并尝试将演示应用程序移动到 swift。我没有手动更改任何build设置。

最佳答案

我最终通过清理构建并向应用程序委托(delegate)添加窗口属性来解决问题...

AppDelegate 需要有一个 var window: UIWindow? 属性。这出现在 Objective C 版本中,我愚蠢地忘记把它放在 swift 版本中。不知何故,在清理构建文件夹后,Xcode 开始提示缺少此类属性,我将其放回原处。

这个 window 属性应该在启动时设置,它的 Root View Controller 应该是 Storyboard中的那个。这部分不在运行良好的 Objective C 版本中,这很简单:

- (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
}
}

成功了

关于ios - 将项目从 ObjC 移植到 Swift 后应用程序无法启动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44277723/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com