我有一个用Objective-C编写的项目,我刚刚使用Swift添加了一个UIApplication子类:RMFApplication.swift
(在帖子末尾实现)。但是,我收到了这个错误:
由于未捕获的异常终止应用程序' NSInternalInconsistencyException',原因:'无法实例化 UIApplication子类实例。没有名为 RMFApplication 的类 。加载'
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,除非两者真的不能很好地合作。
答案 0 :(得分:5)
也许那是因为它使用NSStringFromClass或其他东西,所以在Swift RMFApplication中"mangled" and becomes something like "somePrefix"RMFApplication(或者只是与“RMFApplication”不同)。
你可以试试这个:
@objc(RMFApplication) class RMFApplication: UIApplication
然后NSStringFromClass将只返回“RMFApplication”。