使用Swift UIApplication子类的Objective-C项目。 错误:类未加载
我有一个Objective-C编写的项目,我刚刚添加了一个UIApplication子类使用Swift: RMFApplication.swift
(实施在后)。 但是,我得到这个错误:
由于未捕获exception'NSInternalInconsistencyException',原因:'无法实例化UIApplication子类实例。 没有名为RMFApplication的类被加载。
- 在我的info.plist中,我正确地指定了NSPrincipalClass下的名字,并且对它进行了双重检查。
- 我读了这个答案 ,然后看看我自己的
main.m
里面说:return UIApplicationMain(argc, argv, nil, NSStringFromClass([RMFAppDelegate class]));
。 -
UIApplicationMain
的文档说,如果nil
被指定为thrid值,那么假设UIApplication
,但为什么我的错误信息包含我的自定义类名? 我不得不假设它会读取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被“破坏”,变成类似“somePrefix”的RMFApplication (或者与“RMFApplication”不同的东西)。
你可以试试这个:
@objc(RMFApplication) class RMFApplication: UIApplication
然后NSStringFromClass将只返回“RMFApplication”。