使用Swift UIApplication子类的Objective-C项目。错误:未加载类

时间:2014-10-06 09:23:41

标签: ios objective-c swift uiapplication

我有一个用Objective-C编写的项目,我刚刚使用Swift添加了一个UIApplication子类:RMFApplication.swift(在帖子末尾实现)。但是,我收到了这个错误:

  

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

  • 在我的info.plist中,我正确指定了名称 NSPrincipalClass,并仔细检查它。
  • 我看了this answer,然后查看了我自己的main.m,其中写着:return UIApplicationMain(argc, argv, nil, NSStringFromClass([RMFAppDelegate class]));
  • UIApplicationMain的文档说如果将nil指定为thrid值,则假定为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,除非两者真的不能很好地合作。

1 个答案:

答案 0 :(得分:5)

也许那是因为它使用NSStringFromClass或其他东西,所以在Swift RMFApplication中"mangled" and becomes something like "somePrefix"RMFApplication(或者只是与“RMFApplication”不同)。

你可以试试这个:

@objc(RMFApplication) class RMFApplication: UIApplication

然后NSStringFromClass将只返回“RMFApplication”。