Iphone 如何对UIApplication进行子类化?
iPhone参考库-UIApplication说我可以将UIApplication子类化,但如果我尝试这样做,我会得到一个异常:Iphone 如何对UIApplication进行子类化?,iphone,Iphone,iPhone参考库-UIApplication说我可以将UIApplication子类化,但如果我尝试这样做,我会得到一个异常: *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'There can only be one UIApplication instance.' 这让我想起了高地人“只有一个,。:-) 我是否必须将其他参数传递给UIApplication
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'There can only be one UIApplication instance.'
这让我想起了高地人“只有一个,。:-)
我是否必须将其他参数传递给UIApplicationMain?或者我是否误读了库中的某些内容?在应用程序的info.plist中,确保将
NSPrincipalClass
键更改为子类的名称。这将使Cocoa在应用程序加载时实例化正确的类-您不必执行任何操作如何使您的子类正常工作。您是否将子类的名称传递给UIApplicationMain?假设您
@interface MyUIApp : UIApplication
...
然后在main()中,您应该执行以下操作:
NSString* appClass = @"MyUIApp";
NSString* delegateClass = nil;
int retVal = UIApplicationMain(argc, argv, appClass, delegateClass);
一个应用程序中只能有一个UIApplication实例,您不应该初始化一个新的应用程序对象,使用UIApplication:+(UIApplication*)sharedApplication的静态方法。我知道这是一个旧的实例,可以接受答案,但要说清楚 假设你有:
UIApplication
子类为MyApplication
UIApplicationDelegate
子类为MyAppDelegate
那么你的main.m看起来像:
#import <UIKit/UIKit.h>
#import "MyApplication.h"
#import "MyAppDelegate.h"
int main(int argc, char * argv[])
{
@autoreleasepool
{
return UIApplicationMain(argc,
argv,
NSStringFromClass([MyApplication class]),
NSStringFromClass([MyAppDelegate class]));
}
}
#导入
#导入“MyApplication.h”
#导入“MyAppDelegate.h”
int main(int argc,char*argv[])
{
@自动释放池
{
返回UIApplicationMain(argc,
argv,
NSStringFromClass([MyApplication class]),
NSStringFromClass([MyAppDelegate类]);
}
}
如果您没有子类化
UIApplication
或uiapplicationelegate
,只需将nil
作为相应的参数传递给UIApplicationMain
。我的info.plist中没有NSPrincipalClass键。我应该添加它吗?是的-您的info.plist中可能有很多很多键-它们不都是默认包含。这似乎仅适用于Mac OS X,不适用于iPhone OS:适用于tvOS(我肯定也适用于iOS),应该是公认的答案。您好,我已经尝试了答案中建议的相同方法…但我仍然得到相同的错误…我还需要做什么…?我如何检索此“MyUIApp”类的对象?MyUIApp*app=[UIApplication sharedApplication];@TeemuKurppa什么是swift 4或更高版本?@JamshedAlam相同,但使用swift语法。swift实现是什么?