我有一个用Objective-C编写的项目,我只是使用Swift:RMFApplication.swift(在文章结尾处实现)添加了UIApplication子类。但是,我收到此错误:

由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“无法实例化
UIApplication子类实例。没有名为 RMFApplication 的类
已加载。”

  • 在我的info.plist中,我正确指定了名称
    NSPrincipalClass,并再次检查它。
  • 我读了this answer,然后看了看自己的main.m,上面写着:return UIApplicationMain(argc, argv, nil, NSStringFromClass([RMFAppDelegate class]));
  • UIApplicationMain的文档说,如果将nil指定为第三值,则假定使用UIApplication,但是为什么我的错误消息包含我的自定义类名?我必须假设nil意味着它将读取info.plist值。

  • 注意:子类化UIApplication与RMFApplication.h
    RMFApplication.m。唯一改变的是重命名
    这些文件,以及一个RMFApplication.swift文件,其中
    编译时没有警告:
    import UIKit
    
    class RMFApplication: UIApplication {
    
        override func openURL(url: NSURL) -> Bool
        {
            println(url.description)
            return false;
        }
    }
    

    我知道我可以继续使用Objective-C,但是我想尝试迁移到Swift,除非两者确实不能很好地配合使用。

    最佳答案

    也许是因为它使用了NSStringFromClass之类的东西,所以在Swift RMFApplication中是"mangled" and becomes something like "somePrefix"RMFApplication(或与“RMFApplication”不同的任何东西)。

    您可以尝试以下方法:

    @objc(RMFApplication) class RMFApplication: UIApplication
    

    然后NSStringFromClass将仅返回“RMFApplication”。

    10-01 08:03