我有一个用Objective-C编写的项目,我只是使用Swift:RMFApplication.swift
(在文章结尾处实现)添加了UIApplication子类。但是,我收到此错误:
由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“无法实例化
UIApplication子类实例。没有名为 RMFApplication 的类
已加载。”
NSPrincipalClass,并再次检查它。
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”。