Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 如何对UIApplication进行子类化?_Iphone - Fatal编程技术网

Iphone 如何对UIApplication进行子类化?

Iphone 如何对UIApplication进行子类化?,iphone,Iphone,iPhone参考库-UIApplication说我可以将UIApplication子类化,但如果我尝试这样做,我会得到一个异常: *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'There can only be one UIApplication instance.' 这让我想起了高地人“只有一个,。:-) 我是否必须将其他参数传递给UIApplication

iPhone参考库-UIApplication说我可以将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实现是什么?